
Proof-of-concept exploit demonstrating CVE-2020-25265 및 CVE-2020-25266, 조작된 MP3 파일을 사용하여 libappimage 및 appimaged를 통해 임의 코드 실행을 달성하고 시스템 애플리케이션을 덮어씁니다.
이것은 libappimage 및 appimaged의 PoC 익스플로잇입니다.
두 CVE를 조합하여, appimage로 보이지 않으면서도 appimaged에 의해 암시적으로 수집되어 설치되고, 동일한 애플리케이션의 시스템 설치 버전을 덮어쓸 수 있는 파일을 생성할 수 있습니다.
이 경우 MP3 파일이 페이로드로 사용되었고, Nautilus가 덮어쓰기된 애플리케이션이었습니다.
appimaged의 모든 버전과 1.0.3 이전의 모든 libappimage 버전이 영향을 받습니다.
MP3 코덱에는 파일 헤더가 없으므로 미디어 소프트웨어는 프레임 헤더를 찾기 위해 파일을 스캔해야 합니다. 즉, ELF 및 AppImage 타입 2 헤더를 파일 앞부분에 배치해도 MP3는 여전히 재생 가능합니다. 이로 인해 MP3는 이 PoC에 사용하기에 최적의 대상이 됩니다.
MP3 파일이 수정되어 재생 중인 미디어 뒤에 페이로드 바이너리가 포함되며, Dart 스크립트를 사용하여 MP3 데이터를 페이로드 실행 파일과 ELF 헤더 사이에 배치합니다. (참고: 심볼 테이블의 심볼 위치는 조정하지 않았습니다. 더 많은 노력이 필요했고 이 PoC에는 필요하지 않았기 때문입니다.) 페이로드 바이너리는 1MB 미만이므로 파일 크기가 눈에 띄게 증가하지 않습니다. 파일의 가장 끝에는 squashfs 파일시스템이 추가되어 가짜 Nautilus 데스크톱 파일과 아이콘을 포함합니다.
참고로, 기술적으로는 MP3를 squashfs 끝에 추가해도 작동하지만, 파일에서 너무 늦게 나타나 미디어 플레이어를 혼란시킬 가능성이 더 높은 반면, ELF 헤더 바로 뒤는 파일의 수십 바이트 정도에 불과합니다.
appimaged는 파일 확장자와 관계없이 추적되는 모든 디렉터리의 모든 파일을 스캔합니다. MP3를 발견하면 ELF 및 AppImage 헤더를 감지하고 그 안에 있는 데스크톱 파일을 추출합니다.
이제 가짜 데스크톱 파일이 작성되어 악성 MP3를 가리킵니다. 사용자가 다음에 파일을 실행하면 시스템 설치 대신 MP3에 포함된 ELF 실행 파일이 시작됩니다.
일반적으로 데스크톱 파일 이름은 "appimagekit_...desktop" 형식이므로 시스템 애플리케이션을 완전히 덮어쓸 수 없습니다. 그러나 libappimage의 Integrator.cpp는 Name 필드를 검증이나 이스케이프 없이 가져오므로, 다음과 같이 가짜 데스크톱 파일에 추가할 수 있습니다:
Name=/../org.gnome.Nautilus
Name[en]=Files
그러면 파일이 ~/.local/share/applications/org.gnome.Nautilus.desktop에 기록되어 시스템에 설치된 Nautilus를 가립니다.
설치된 libappimage 버전이 최소 1.0.3 이상인지 확인하십시오. 이 버전은 Name 필드 검증을 수정합니다. 특히 현재 Debian의 libappimage는 이 버전을 포함하지 않으며 상당히 오래되었습니다.
모든 appimaged 버전이 취약하며, 프로젝트는 더 이상 사용되지 않습니다. go-appimage는 *.AppImage 이름의 앱이미지만 수집하여 파일명 문제를 회피합니다. AppImageLauncher는 설치 전에 사용자에게 권한을 요청하여 파일명 문제를 회피합니다.
audio.mp3에 임의의 오디오 파일을 넣고 dart bin/write_mp3.dart를 실행하여 페이로드를 빌드하고 수정된 MP3 파일을 작성하십시오. 작동하려면 Dart SDK와 FreePascal이 설치되어 있어야 합니다.
바이너리에는 Pascal이 사용되었는데, 이는 서브프로세스 기능을 사용할 때 테스트한 다른 언어들(C는 musl로 정적 링크, Go) 중에서 가장 작은 정적 링크 바이너리를 생성했기 때문입니다.
테스트에서는 world.execute(me)가 오디오 파일로 사용되었는데, 적절하다고 생각되었기 때문입니다.