
이 글은 OpenAI의 o3 모델을 활용해 리눅스 커널의 SMB(ksmbd) 구현에서 제로데이 취약점(CVE-2025-37899)을 발견한 과정을 시간순으로 상세하게 설명합니다. 글쓴이는 복잡한 도구 없이 o3 API만을 사용해 취약점을 찾았고, 이 경험을 통해 LLM(대형 언어 모델)이 코드 분석 및 취약점 연구에 얼마나 큰 도약을 이뤘는지 강조합니다.
ksmbd란?
글쓴이의 동기
"o3 LLM은 코드에 대한 추론 능력에서 큰 도약을 이뤘습니다. 취약점 연구에 종사한다면 이제는 정말 주목해야 할 때입니다."
CVE-2025-37778:
취약점의 원인 코드:
if (sess->state == SMB2_SESSION_VALID) ksmbd_free_user(sess->user); retval = ksmbd_krb5_authenticate(sess, in_blob, in_len, out_blob, &out_len); if (retval) { ksmbd_debug(SMB, "krb5 authentication failed\n"); return -EINVAL; }
sess->state가 SMB2_SESSION_VALID이면 sess->user를 해제.ksmbd_krb5_authenticate가 sess->user를 재초기화하지 않을 수 있고,krb5_authenticate가 -EINVAL을 반환해도 다른 곳에서 sess->user를 사용할 수 있음."이 취약점은 리눅스 커널의 원격 공격 표면에 속해 있다는 점에서 흥미롭습니다."
LLM(특히 o3)에게 어려운 점
sess->state == SMB2_SESSION_VALID 조건을 어떻게 만들지 추론해야 함.ksmbd_krb5_authenticate가 sess->user를 재초기화하지 않는 경로를 찾아야 함.sess->user가 다른 코드에서 사용될 수 있음을 파악해야 함.분석에 필요한 코드량: 약 3,300줄(3.3k LoC)
이상적: 전체 저장소 코드를 LLM에 입력 → 결과 도출
실험적 접근:
프롬프트 설계
"거짓 양성은 최대한 피하고, 차라리 아무 버그도 보고하지 않는 쪽을 선호하라고 강하게 유도했습니다."
실험 방법
llm 툴로 100회 반복 실행, 결과 저장"o3의 결과는 마치 사람이 쓴 버그 리포트처럼 구조적이고 명확합니다. 반면 Sonnet 3.7은 생각의 흐름이나 작업 로그에 가깝죠."
실험 확장:
결과
sess->user를 해제하는 과정에서 발생취약점 코드:
if (sess->user) { ksmbd_free_user(sess->user); sess->user = NULL; }
o3의 설명
"한 ksmbd 워커 스레드가 sess->user를 사용하는 동안,
다른 스레드가 같은 세션에 대해 SMB2 LOGOFF를 처리하며 해당 구조체를 해제합니다.
포인터를 보호하는 동기화가 없어 첫 번째 스레드는 해제된 메모리를 참조하게 됩니다.
이는 커널 메모리 손상 및 임의 코드 실행로 이어질 수 있는 전형적인 use-after-free입니다."
취약점 발생 경로 요약
if (user_guest(sess->user)) // 해제 후 참조 ksmbd_compare_user(sess->user, …) sess->user->uid
sess->user = NULL로 패치했으나,"o3의 리포트를 읽고 나서야, SMB 프로토콜이 두 개의 연결이 같은 세션에 바인딩될 수 있음을 다시 떠올렸습니다.
이로 인해 해제 후 짧은 시간 동안 다른 스레드가 sess->user를 사용할 수 있습니다."
o3의 리포트 중 일부도 같은 실수를 했지만,
다른 리포트에서는 이 점을 정확히 지적
"o3를 활용했다면, 이론적으로는 더 나은 패치를 할 수 있었을 겁니다."
신호 대 잡음비
"GPT-4 이후로 LLM의 취약점 연구 가능성에 대한 기대가 있었지만,
실제 문제에서 그 기대를 충족한 적은 거의 없었습니다.
o3는 그 기대를 현실로 바꿨습니다."
이 글은 o3와 같은 LLM이 실제 코드 취약점 연구에 어떻게 활용될 수 있는지,
그리고 그 과정에서 인간 연구자의 효율성과 정확성을 어떻게 높일 수 있는지
생생한 사례와 함께 보여줍니다.
아직 완벽하진 않지만, 이제는 LLM을 적극적으로 활용할 시점임을 강조합니다. 🚀