
CVE-2025-24132(AirBourne)에 대한 PoC. 현재는 오버플로를 유발하여 크래시를 일으킬 뿐입니다.
CVE-2025-24132(AirBourne)용 POC입니다. 현재는 오버플로를 트리거하여 크래시를 일으키는 것까지만 구현되어 있습니다.
제 차량 헤드 유닛에 대한 root 권한을 얻기 위해, Oligo Security가 발견한 Airplay 익스플로잇 CVE-2025-24132(코드명 Airbourne)에 대해 제가 배운 모든 것을 조사하고 정리했습니다.
https://www.oligo.security/blog/airborne
이것은 제 첫 리버스 엔지니어링 프로젝트입니다. 디버거를 한 번도 사용해 본 적 없고, Linux와 코딩 경험도 거의 없으며, 프로젝트 중반이 되어서야 MacOS를 처음 접한 상태로 뛰어들었습니다. 아마 CTF부터 시작했어야 했을지도 모릅니다... 어쨌든요. 지난 몇 달 동안 가능할지 확인해 보려고 틈틈이 작업해 왔습니다.
Diff를 뜰 취약한 버전과 패치된 버전의 바이너리를 얻는 데 몇 달이 걸렸고, 실제로 에뮬레이터에서 실행하는 데 또 한 달이 걸렸습니다.
하지만 알고 보니 취약한 코드는 에뮬레이터에서는 도달할 수 없었습니다. 로직 보드의 물리적 MFi 칩과의 통신이 필요했기 때문입니다. 2개월 동안 오버플로에 도달할 수 없는 이유를 고민하다가 문제를 깨달은 후, MFi 칩 응답에 대한 검사를 패치하고 반환값을 쓰레기 값으로 채우는 방식으로 바이너리를 충분히 개조(cannibalize)할 수 있었습니다. 이를 통해 마침내 오버플로에 도달할 수 있었고, 실제 시스템에서 크래시를 일으킬 수 있을 만큼 충분히 이해하게 되었습니다.
오버플로는 AES CTR 암호화 처리에 존재합니다. SETUP 패킷으로 전달되는 암호화 키의 크기는 검사되지 않으며 16이라고 가정되고, 16 크기의 버퍼가 생성됩니다.
이러한 크래시는 거의 눈에 띄지 않는데, 서버가 일반적으로 즉시 재시작되어 다시 연결되기 때문에 결과적으로는 짧은 오디오 끊김이나 CarPlay 시스템의 몇 초간 블랙 스크린만 발생합니다. 아직 메모리 누출(leak) 방법을 파악하지 못했기 때문에, 현재로서는 스택 보호가 비활성화된 장치에서만 사용할 수 있습니다.
스택 보호를 우회할 수 있는 메모리 누출 방법을 찾습니다.
이것은 어떤 형태의 인증도 요구하지 않는 CarPlay 유닛 또는 AirPlay 유닛을 대상으로 동작합니다. 페어링을 위해 PIN이 먼저 필요한 경우에는 구현되지 않은 추가 페어링 단계가 더 있기 때문에 동작하지 않습니다.
Bluetooth 기반 장치의 경우, Bluetooth 페어링을 알아내는 번거로운 작업을 피하기 위해 Pyto 같은 앱을 다운로드해서 제가 했던 것처럼 휴대폰에서 직접 스크립트를 실행하면 됩니다. 훨씬 쉽습니다.
발견하는 대로 패치된 장치를 여기에 추가하겠습니다.
Airplay를 지원하는 모든 Onkyo AV 리시버는 이 취약점에 노출되어 있어야 합니다. 제 테스트 유닛은 TX-NR656으로, 스택 보호 기능이 전혀 없습니다. 펌웨어 3.1 이전의 Creston DM-NAX-8ZSA 유닛은 취약하며 canary가 없지만, Airplay 프로세스는 컨테이너 안에서 실행됩니다. Kia CCNC 헤드 유닛은 적절한 스택 보호 기능이 있어 지금까지는 이를 우회하지 못했지만, 시스템 로그에 따르면 carplayserver가 root로 실행됩니다.