드래그 앤 드롭만으로 누구나 손쉽게 폼을 제작하고 커스터마이징할 수 있는 워드프레스 플러그인 Ninja Forms는 현재 100만 개가 넘는 웹사이트에서 사용되고 있습니다. 그런데 최근 이 플러그인의 '파일 업로드(File Upload)' 확장 기능에서 임의 파일 업로드(Arbitrary File Upload)와 경로 탐색(Path Traversal) 취약점이 발견되었다는 소식이 알려지면서 수많은 사이트 운영자들에게 충격을 주었습니다.

이번 취약점을 최초로 공개한 곳은 정보보안 기업 온비오(Onvio)입니다. Onvio는 자사 보고서 'PENTEST REVEALS VULNERABILITIES IN WORDPRESS PLUGIN NINJA FORMS <= 3.0.22'를 통해 직접 수행한 침투 테스트(pentesting) 결과를 상세히 공개했습니다.
취약점 상세 내용
실제 상황은 이렇습니다. Onvio가 고객사 대상으로 진행한 침투 테스트 과정에서 Ninja Forms가 경로 탐색과 임의 코드 실행을 허용한다는 사실이 확인된 것입니다.
결국 인증되지 않은(unauthenticated) 공격자가 파일 시스템을 마음대로 탐색하며 중요 파일에 접근하고, 플러그인의 includes/fields/upload.php(업로드/제출 페이지)의 name 및 tmp_name 파라미터를 통해 코드까지 실행할 수 있게 됩니다.
1. 임의 파일 업로드(Arbitrary File Upload)
아래 이미지는 공격자가 서버로 전송한 요청입니다.

그리고 이 요청에 대해 받은 응답은 다음과 같습니다.

공격자는 응답에 포함된 tmp_name 값을 이용해, 악성 시도로 탐지되지 않도록 대괄호([])가 들어간 파일명으로 서버에 다시 요청을 보냈습니다.

예상대로 워드프레스의 sanitize_file_name 함수는 미리 정의된 일부 특수문자만 정화(sanitize)하기 때문에 대괄호를 제거해 버립니다. 그 결과 <?php phpinfo(); ?> 코드가 담긴 test.png.doc 파일이 핵심 실행 파일인 test.php로 업로드되고 말았습니다.

2. 경로 탐색(Path Traversal)
공격자는 아래 코드를 이용해 wp-config.php 파일 탈취를 시도했고, 실제로 데이터베이스 접속 정보 등 민감한 내용이 그대로 노출되었습니다.


안전하게 대응하는 방법
Ninja Forms의 해당 취약점은 취약한 버전 3.0.22를 대체하는 3.0.33 버전 출시로 이미 해결되었습니다. 지금 당장 할 수 있는 가장 기본적인 조치는 사이트를 최신 버전으로 즉시 업데이트하는 것입니다. 또한 더 이상 사용하지 않는 플러그인 확장 기능은 비활성화하고, 정기적으로 보안 점검을 실시하는 것이 좋습니다.
Astra로 워드프레스 사이트 지키기
Astra와 같은 종합 보안 솔루션을 도입하면 워드프레스 사이트를 연중무휴 24시간 모든 유형의 해킹으로부터 보호할 수 있습니다. Astra의 웹 방화벽(WAF)은 트래픽을 실시간으로 모니터링하여 XSS, CSRF, 악성 봇(Bad Bots) 등 100여 가지 공격을 차단합니다. 무엇보다 월 $19부터 시작하는 합리적인 가격이라 개인 블로그에도 부담 없이 적용할 수 있습니다. 워드프레스 같은 CMS를 위해 특별히 설계된 Astra로 심각한 보안 사고를 미리 예방하세요. 지금 바로 Astra 데모를 신청해 보세요!