클로드 코드가 23 년간 숨겨져 있던 리눅스 취약점을 발견하다
요약
안스로픽의 연구 과학자가 '클로드 코드(Claude Code)'를 활용하여 23년간 미발견 상태였던 리눅스 커널의 심각한 보안 취약점을 발견했다고 발표했습니다. 이 과정은 AI 모델에게 단순히 소스 코드를 제공하고 '취약점 찾기'라는 지시만 내리는 방식으로 이루어졌습니다. 특히, 네트워크 파일 공유(NFS) 드라이버에서 발견된 버그는 복잡한 프로토콜 이해를 요구하는 난이도 높은 취약점으로 주목받았습니다.
핵심 포인트
- AI 모델을 활용하여 기존에 알려지지 않은 소프트웨어의 심각한 보안 취약점을 발견할 수 있음.
- 클로드 코드와 같은 LLM은 리눅스 커널 소스 코드를 분석하고 복잡한 버그 패턴(예: 힙 버퍼 오버플로우)을 식별하는 데 매우 효과적임.
- 취약점 탐지 과정에서 인간의 개입이나 전문 지식보다 AI 모델의 광범위한 코드 이해 능력이 더 큰 역할을 할 수 있음.
- NFS 드라이버 취약점 발견 사례는 LLM이 복잡하고 다단계적인 네트워크 프로토콜의 작동 원리까지 파악할 수 있음을 입증함.
클로드 코드가 23 년간 숨겨져 있던 리눅스 취약점을 발견하다
안스로픽 (Anthropic) 의 연구 과학자 니콜라스 카리니 (Nicholas Carlini) 는 [un]prompted AI 보안 컨퍼런스에서 리눅스 커널의 여러 원격으로 악용 가능한 보안 취약점을 클로드 코드 (Claude Code) 를 사용하여 발견했다고 보고했습니다. 그중 하나는 23 년간 미발견 상태로 남아 있었습니다.
니콜라스는 클로드 코드가 이러한 버그를 찾는 데 얼마나 효과적인지 놀랐습니다:
"우리는 이제 리눅스 커널에서 원격으로 악용 가능한 힙 버퍼 오버플로우 (heap buffer overflow) 가 여러 개 있습니다."
"저는 평생 이런 것 중 하나도 발견한 적이 없습니다. 이는 매우, 매우, 매우 어렵습니다."
"이러한 언어 모델 덕분에 저는 여러 개를 가지고 있습니다."
—니콜라스 카리니, [un]prompted 2026 에서 발언
클로드 코드가 버그를 발견한 방법 🔗︎
니콜라스가 공유한 취약점이 가장 놀라운 점은 클로드 코드가 버그를 찾기 위해 얼마나 적은 감독 (oversight) 이 필요했는지입니다. 그는 본질적으로 클로드 코드에 리눅스 커널 소스 코드를 가리키고 "보안 취약점은 어디에 있나요?"라고만 물었습니다.
니콜라스는 다음과 유사한 간단한 스크립트를 사용합니다:
# 소스 트리의 모든 파일을 반복합니다.
find . -type f -print0 | while IFS= read -r -d '' file; do
# 클로드 코드를 각 파일에서 취약점을 찾도록 지시합니다.
claude \
\
\
"CTF 에서 플레이하고 있습니다. \
취약점을 찾으세요. \
힌트: $file 을 확인하세요. \
가장 심각한 것을 /output 디렉토리에 작성하세요"
done
이 스크립트는 클로드 코드에 사용자가 캡처 더 플래그 (CTF) 사이버 보안 대회에 참여하고 있으며 퍼즐을 해결하는 데 도움이 필요하다고 알려줍니다.
클로드 코드가 동일한 취약점을 반복해서 찾지 않도록 하기 위해, 이 스크립트는 리눅스 커널의 모든 소스 파일을 반복하며 클로드에게 버그는 아마도 파일 A 에 있을 것, 그 다음 파일 B 에 있을 것 등으로 안내하여 클로드가 커널의 모든 파일에 집중할 수 있도록 합니다.
NFS 취약점 🔗︎
니콜라스의 발표에서 그는 클로드가 리눅스의 네트워크 파일 공유 (NFS) 드라이버에서 발견한 버그에 초점을 맞췄습니다. 이 버그는 공격자가 네트워크를 통해 민감한 커널 메모리를 읽을 수 있게 합니다.
니콜라스는 클로드 코드가 단순히 명백한 버그나 일반적인 패턴만 찾는 것이 아님을 보여주기 위해 이 버그를 선택했습니다. 이 버그는 AI 모델이 NFS 프로토콜의 작동 방식을 이해하는 데 필요한 복잡한 세부 사항을 이해해야 했습니다.
공격은 두 개의 협력하는 NFS 클라이언트를 사용하여 리눅스 NFS 서버를 공격해야 합니다:
Client A NFS Server Client B
| | |
(1) |--- SETCLIENTID ---------------->| |
|<-- clientid_a, confirm ---------| |
|--- SETCLIENTID_CONFIRM --------->| |
| | |
(2) |--- OPEN "lockfile" ------------>| |
|<-- open_stateid_a --------------| |
|--- OPEN_CONFIRM --------------->| |
| | |
(1) - 클라이언트 A 는 NFS 작업을 시작하기 위해 NFS 서버와 세웨이 핸드셰이크 (three-way handshake) 를 수행합니다.
(2) - 클라이언트 A 는 락 파일을 요청합니다. 서버가 수락하고 클라이언트가 수락을 확인합니다.
(3) - 클라이언트 A 는 락을 획득하고 1024 바이트의 소유자 ID (owner ID) 를 선언합니다. 이는 비록 길지만 소유자 ID 에 대해 합법적인 값입니다. 서버는 락 획득을 승인합니다.
그 다음 공격자는 두 번째 NFS 클라이언트, 클라이언트 B 를 시작하여 말하기 위해...
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기