
CVE-2021-29447에 대한 기술 분석: WordPress 미디어 라이브러리의 XXE 취약점으로, 인증된 사용자가 악성 WAVE 업로드를 통해 민감한 파일을 유출할 수 있습니다. 익스플로잇 단계, 취약한 코드 분석, 패치 세부 정보를 포함합니다.
악의적인 WAVE 파일을 업로드할 수 있는 사용자(예: 작성자)는 WordPress 미디어 라이브러리의 XML 구문 분석 문제를 악용하여 XXE 공격을 유발하고 파일 시스템 노출로 이어질 수 있습니다.
XML 외부 엔티티(XXE) 취약점
XML은 문서 전체에서 재사용할 수 있는 사용자 정의 엔티티를 정의할 수 있는 기능을 제공합니다. 예를 들어 중복을 피하기 위해 사용될 수 있습니다. 다음 코드는 추가 사용을 위해 myEntity 엔티티를 정의합니다.

정의된 엔티티의 값은 URI로 참조되는 외부 소스에서 비롯될 수도 있습니다. 이 경우 외부 엔티티라고 합니다.

XXE 공격은 이 기능을 악용합니다. 공격자가 URI로 file:///var/www/wp-config.php를 제공하면 민감한 파일 내용을 성공적으로 유출할 수 있습니다. 이 공격은 느슨하게 구성된 XML 파서가 사용자 제어 콘텐츠에서 실행될 때 가능합니다.
WordPress의 XXE
WordPress에는 인증된 사용자가 미디어 파일을 업로드하여 블로그 게시물에 사용할 수 있는 미디어 라이브러리가 있습니다. 이러한 미디어 파일에서 아티스트 이름이나 제목과 같은 메타 정보를 추출하기 위해 WordPress는 getID3 라이브러리를 사용합니다. 이 메타데이터 중 일부는 XML 형식으로 구문 분석됩니다. 여기서 가능한 XXE 취약점이 보고되었습니다(730번 줄).

libxml_disable_entity_loader(true) 함수는 PHP 8 버전이 기본적으로 외부 엔티티 가져오기를 비활성화하는 Libxml2 v2.9+를 사용하기 때문에 더 이상 사용되지 않습니다.
다음 명령을 사용하여 악의적인 WAVE 파일을 생성합니다

dtd 파일을 생성하고 이 코드를 추가하면 데이터베이스 자격 증명과 같은 민감한 데이터가 포함된 wp-config.php를 검색할 수 있습니다.

이제 HTTP 서버를 실행합니다

악의적인 .wav 파일을 WordPress 애플리케이션에 업로드합니다. .wav 파일을 업로드하면 HTTP 서버 로그에서 다음 요청을 볼 수 있습니다. 참고: 데이터를 효과적으로 유출하려면 디코딩에 Zlib을 사용하십시오.

그런 다음 데이터베이스 자격 증명을 얻고 데이터베이스에 로그인하여 관리자를 찾습니다.

corp-001이 관리자입니다. 그의 비밀번호 해시를 크랙하고 관리자로 로그인합니다.

WordPress는 PHP 8에서 더 이상 사용되지 않는 libxml_disable_entity_loader() 함수 호출을 다시 도입하여 버전 5.7.1에서 취약점을 패치했습니다. PHP 지원 중단 경고를 피하기 위해 호출에 PHP 오류 억제 연산자 @가 추가되었습니다.

https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/
https://nvd.nist.gov/vuln/detail/CVE-2021-29447
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29447
https://github.com/motikan2010/CVE-2021-29447
https://www.youtube.com/watch?v=pkooNXGHl7c
https://www.youtube.com/watch?v=tE8Smz1Jvb8
https://www.mend.io/vulnerability-database/CVE-2021-29447