[하루한줄] CVE-2024-23724: Ghost CMS의 Stored XSS 취약점으로 인한 Privilege escalation
URL
https://rhinosecuritylabs.com/research/cve-2024-23724-ghost-cms-stored-xss/
Target
- Ghost CMS <= 5.76.0
Explain
Apple, Mozilla, Open AI에서 사용하는 오픈 소스 블로깅 플랫폼 Ghost에서 Stored XSS 취약점이 발견되었습니다.
취약점은 사용자가 SVG 파일을 업로드할 때 파일 내용을 검증하지 않아 발생했습니다.
Ghost CMS는 사용자 프로필 이미지로 SVG 파일을 사용합니다. SVG는 XML 기반 이미지 파일로, JavaScript 코드를 포함할 수 있습니다.
따라서, 공격자는 SVG 파일 내에 악의적인 JavaScript 코드를 삽입하고, 다른 사용자가 이미지를 접근할 때 코드가 실행되는 방식으로 공격을 할 수 있습니다.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
<script type="text/javascript">
alert(document.domain);
</script>
</svg>
공격자 이미지 파일에 접근할 경우 SGV 파일에 JavaScript 코드가 실행되는 것을 확인할 수 있습니다.
PoC를 통해 가장 낮은 권한인 Contributors에서 Owner 권한을 탈취할 수 있습니다.
Owner는 결제 정보에 접근 가능하며 삭제할 수 없는 계정으로, 여러 Administrators 중 한 명만 Owner 권한을 가질 수 있습니다.
공격자는 Owner에게 프로필 URL을 전달함으로써, Contributors에서 Administrators 권한을 얻은 뒤, 최종적으로 Owner 권한까지 탈취할 수 있습니다.
해당 취약점은 벤더 측에서 인정하지 않아 공식적인 패치를 제공하지 않지만, 취약점 제보자가 DOMPurify 라이브러리를 통해 SVG 파일 내용을 검증하는 코드가 추가하여 패치했습니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.