
이 도구는 CVE-2023-4863에 대한 까다로운 정규 허프만 히스토그램을 계산합니다.
이 도구는 취약한 libwebp 라이브러리(예: libwebp <= 1.3.1)에 대해 OOB(Out Of Band) 쓰기를 트리거할 수 있는 까다로운 표준 허프만 히스토그램을 계산합니다. 이 취약성은 CVE-2023-4863 또는 CVE-2023-41064로 알려져 있습니다. 사전 할당된 허프만 테이블을 최대 132개 항목까지 오버플로할 수 있습니다.
그 이유는 libwebp가 각 webp 이미지에 포함된 허프만 히스토그램이 잘 구성되어 있다고 가정하기 때문입니다. 즉, 디코딩 트리는 완전한 트리여야 합니다. 이 가정 하에 libwebp 그룹은 enough 도구를 활용하여 디코딩 허프만 테이블(표준 허프만 코드를 빠르게 디코딩하기 위한 강력한 구조)을 구축하는 데 필요한 최대 메모리 크기를 추정했습니다. 그러나 해커는 불완전한 트리를 구성하여 이 메모리 제한을 초과하고 사전 할당된 메모리를 오버플로할 수 있습니다.
이 해킹 도구는 불완전한 트리 지원을 위해 enough를 조정하여 만들어졌습니다.
아래 명령어를 사용하여 코드를 컴파일하세요:
gcc -o NotEnough ./main.c
40개 심볼, 8비트 루트 테이블, 최대 깊이 15인 허프만 테이블의 경우 최대 테이블 항목 수는 410입니다. 그러나 불완전한 트리를 구성하면 테이블 항목 수가 542가 될 수 있습니다. 아래 명령어를 시도해보세요:
./NotEnough 40 8 15
이러한 트리의 예는 다음과 같습니다:
간결함을 위해 잎이 없는 가지는 제거했습니다.
그런 다음 craft 도구를 사용하여 dwebp 도구(버전 <= 1.3.1)를 오버플로할 수 있는 효과적인 webp 이미지를 구성할 수 있습니다. 그에 따라 허프만 코드 히스토그램 **code_lengths_counts[4]**를 {0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 17, 1, 1, 3}으로 변경하고 도구를 다시 빌드하세요:
vim craft.c # 그에 따라 허프만 코드 히스토그램 변경 (약 495번째 줄)
gcc -o craft craft.c
./craft -o bad_542.webp
CVE-2023-4863에 대한 더 나은 이해를 위해 @benhawkes의 블로그를 확인하세요.