OpenBSD 커널의 37년 묵은 정수 오버플로로 SMAP/SMEP를 뚫고 root 셸 획득
- Calif가 OpenBSD의 shm_nattch 카운터 정수 오버플로와 use-after-free를 결합해 SMAP/SMEP가 켜진 상태에서 로컬 root 권한을 얻는 방법을 공개함
- 이 카운터는 원본 BSD 소스에서 signed 16-bit short로 정의돼 약 37년 전부터 존재하던 코드임
- 반복 fork로 259개 프로세스를 만들어 카운터를 -32,643까지 감기게 하고, 힙 배치를 조작한 뒤 IPC_RMID 경쟁 조건을 노림
- 수정은 errata 026(sysvipc)과 018(shmat)으로 배포됨, KARL은 커널 주소를 재링크하지만 boot-time allocator와 best-fit allocator에 베이스 주소 무작위화가 없어 할당 위치가 부팅마다 예측 가능함
Hacker News opinions
재밌는 건 이거 NetBSD에선 1999년 8월 코드 재작성할 때 우연히 고쳐졌더라. 사실상 거기선 안 터지는 버그였던 셈임.
37년 버틴 버그라는 게 놀랍긴 한데 이런 종류는 리뷰만으론 잡기 어려움. 퍼징이나 정적 분석으로 잡혔을 수 있을까, 아니면 사람이 익스플로잇 원시 기능을 떠올려야 했을까?
이 블로그 글들 자체가 AI로 만든 거고 AI가 찾은 버그를 다룸. 말하자면 퍼징이랑 비슷한 셈임. 라우터, 자동차, PLC 같은 오래된 커널 임베디드 기기에도 이런 게 널려 있을 듯.
감사가 그렇게 빡세게 된 코드는 아님. 활동 개발자가 열 명 남짓이라더라.
전혀 놀랍지 않음. 누구도 C를 완벽하게 못 씀. 나도 AI 돌려서 cat이랑 find 봤는데 버그 여러 개 나왔음. 버퍼 오버플로우 하나는 익스플로잇 되기 힘들 것 같긴 함.
heavily audited는 좀 과한 표현인 듯. 누가 뭘 보고 감사했는지가 핵심임. 에이전트 도구로 감사 빈도를 올리려는 건지 궁금하고, 자원봉사 시간이 더 들어갈 수도 있음.
OpenBSD가 완전 안전하다는 건 거의 픽션임. 기본 설치는 할 게 별로 없고 패키지 깔면 보안 주장 밖임. 국가 기관 워크스테이션은 결국 Windows고 라우터는 Cisco나 Juniper임.