
CVE-2016-7608: IOFireWireFamily의 버퍼 오버플로우
IOFireWireFamily-overflow는 CVE-2016-7608에 대한 개념 증명 익스플로잇입니다. 이는 IOFireWireUserClient의 버퍼 오버플로우로, macOS Sierra 10.12.2에서 수정되었습니다. 이 취약점은 FireWire 포트가 있는 장치에서 서비스 거부(DoS) 또는 임의 코드 실행을 유발하도록 트리거될 수 있습니다.
AppleFWOHCI::updateROM 메서드는 AppleFWOHCI_IOMemoryBlock32::create를 사용하여 할당된 고정 크기 메모리 영역으로 내용을 bcopy하기 전에 OSData 인수의 길이를 확인하지 않습니다.
익스플로잇은 IOFireWireUserClient 인스턴스를 사용하여 트리거할 수 있습니다. localConfigDirectory_Create 메서드를 호출하면 IOLocalConfigDirectory에 대한 핸들을 얻습니다. localConfigDirectory_addEntry_Buffer 메서드를 사용하여 이 디렉토리 객체에 임의의 데이터를 추가할 수 있으며, 이 메서드는 32비트 size 매개변수의 한계를 초과하는 데이터 크기를 제한하지 않습니다. 마지막으로 localConfigDirectory_Publish를 호출하여 익스플로잇을 트리거할 수 있으며, 이는 결국 IOFireWireController::UpdateROM을 호출합니다. UpdateROM은 이전에 추가된 사용자 제어 데이터를 포함하여 컴파일된 ROM을 나타내는 OSData 객체를 생성합니다. 그런 다음 OSData 객체를 AppleFWOHCI::updateROM에 전달하며, 이 메서드는 데이터를 fpNextConfigROM이 가리키는 메모리 영역에 복사합니다. 이 영역은 AppleFWOHCI::setupAsync에서 AppleFWOHCI_IOMemoryBlock32::create를 사용하여 할당된 4096바이트 메모리 영역입니다. localConfigDirectory_addEntry_Buffer에 4096바이트 이상이 전달되면 쓰기가 이 할당을 넘어 다음 페이지로 오버플로우됩니다.
실제로 오버플로우된 버퍼 다음 페이지는 일반적으로 매핑 해제되어 오버플로우 시 커널 패닉이 발생합니다.
IOFireWireFamily-overflow 코드는 퍼블릭 도메인으로 제공됩니다. 예의로써 이 코드를 참조하거나 사용하는 경우 저에게 출처를 표시해 주시기 바랍니다.