CVE-2025-53367 : Djvulibre로 악용 가능한 외부로 쓰기
DJVULIBRE 버전 3.5.29가 오늘 출시되었습니다. CVE-2025-53367 (GHSL-2025-055), OOB (Of-Off-Founds) 쓰기를 수정합니다. MMRDecoder::scanruns
방법. 사용자가 제작 된 문서를 열려고 할 때 Linux 데스크탑 시스템에서 코드 실행을 얻기 위해 취약점을 악용 할 수 있습니다.
DJVU는 PDF와 유사한 목적으로 사용할 수있는 문서 파일 형식입니다. 그것은 많은 Linux 배포판의 기본 문서 뷰어 인 Evince and Papers에서 지원합니다. 실제로, DJVU 파일에 .pdf 확장자가있는 파일 이름이 제공 되더라도 Evine/Papers는 DJVU 문서임을 자동으로 감지하고 DJVULIBRE를 실행하여 해독합니다.
Antonio는 Evince Document Reader를 연구하면서 이러한 취약점을 발견했습니다. 그는 퍼징으로 버그를 발견했다.
Kev는이 비디오에서 시연 된 것처럼 취약점에 대한 개념 증명 악용을 개발했습니다.
POC는 모든 표준 보안 보호 기능을 갖춘 완전 최신 Ubuntu 25.04 (x86_64)에서 작동합니다. 비디오에서 무슨 일이 일어나고 있는지 설명하기 위해 :
- Kev는 그의 악의적 인 DJVU 문서를 클릭합니다
~/Downloads
예배 규칙서. - 파일의 이름이 있습니다
poc.pdf
그러나 실제로는 DJVU 형식입니다. - 기본 문서 뷰어 (
/usr/bin/papers
) 문서를로드하고 DJVU 형식으로 검출하고 djvulibre를 사용하여 해독합니다. - 파일은 OOB 쓰기 취약점을 악용하고
system("google-chrome https://www.youtube.com/…")
. - Rick Astley가 나타납니다.
POC가 ASLR을 우회 할 수는 있지만 다소 신뢰할 수 없습니다. 연속으로 10 번 작동 한 다음 갑자기 몇 분 동안 작업을 중단합니다. 그러나 이것은 첫 번째 버전 일 뿐이며 훨씬 더 신뢰할 수있는 악용을 만들 수 있다고 생각합니다.
당신은 궁금 할 것입니다 : 왜 Astley가 계산기가 아닌가? 그 때문입니다 /usr/bin/papers
AppArmor 프로필 아래에서 실행됩니다. 이 프로필은 임의의 프로세스를 시작하는 것을 금지하지만 Google-Chrome에 대한 예외를 만듭니다. 따라서 Calc를 팝하는 것보다 YouTube 비디오를 재생하는 것이 더 쉬웠습니다. 그러나 AppArmor 프로파일은 특별히 제한적이지 않습니다. 예를 들어, 정말 명백한 것과 같은 명백한 파일을 제외하고는 사용자의 홈 디렉토리에 임의의 파일을 작성할 수 있습니다. ~/.bashrc
. 따라서 결정된 공격자가 코드 실행을 얻지 못하게하지는 않습니다.
그만큼 MMRDecoder::scanruns
방법은 OOB-Write 취약점의 영향을받습니다. xr
포인터는 할당 된 버퍼의 범위 내에 남아 있습니다.
디코딩 프로세스 중에 실행 길이 인코딩 된 데이터는 두 버퍼로 기록됩니다. lineruns
그리고 prevruns
:
//libdjvu/MMRDecoder.h
class DJVUAPI MMRDecoder : public GPEnabled
{
...
public:
unsigned short *lineruns;
...
unsigned short *prevruns;
...
}
이름이 지정된 변수 pr
그리고 xr
해당 버퍼의 현재 위치를 가리 킵니다.
scanruns
이 포인터가 할당 된 버퍼의 범위 내에 남아 있는지 확인하지 않습니다.
//libdjvu/MMRDecoder.cpp
const unsigned short *
MMRDecoder::scanruns(const unsigned short **endptr)
{
...
// Swap run buffers
unsigned short *pr = lineruns;
unsigned short *xr = prevruns;
prevruns = pr;
lineruns = xr;
...
for(a0=0,rle=0,b1=*pr++;a0
이로 인해 할당 된 메모리를 넘어 서면 힙 손상 조건이 생길 수 있습니다. 바운드 외부는 함께 읽습니다 pr
같은 이유로도 가능합니다.
Github Security Lab 리포지토리에서 몇 주 시간에 개념 증명 Excloit의 소스 코드를 게시 할 것입니다.
우리는 Léon Bottou와 Bill Riemers에게 엄청나게 신속하게 응답하고 처음 연락 한 후 이틀 미만의 수정을 공개 한 것에 감사드립니다!
작성자가 작성했습니다
Post Comment