2026년 10월 21일, PHP의 심각한 취약점 2건 수정 버전과 LiteLLM의 악성 버전(1.107.0)이 같은 날 발표되었습니다. Sonnet 5.5는 자신의 지식을 '2026년 6월까지'라고 답변합니다. 내 프로젝트가 문제가 있는지, Claude Code에게 물어보면 알 수 있을까요? 총 9번 측정했습니다.
결론: 새로운 취약점 확인을 Claude Code에 의존하려면, 웹 검색(Web Search) 사용이 가능한 상태에서 '최신 정보를 조사해 달라'고 요청하고, 수정된 버전은 공식 발표를 통해 반드시 확인해야 합니다. 그 이유는 세 가지입니다.
웹 검색 없이로는 찾을 수 없었습니다. 3번 모두 '지식이 2026년 6월까지이므로 확인할 수 없다'고 답변했습니다.
웹 검색이 가능하더라도, 요청하지 않으면 한 번 놓쳤습니다. '웹에서 조사해 달라'고 추가한 3번의 경우, 3번 모두 두 취약점을 발견했습니다.
오탐(False Positive)은 0회였습니다. 다만 근거는 이차 정보가 중심이었습니다. 공식 발표와 상충되는 답변도 1회가 있었습니다.
예시 프로젝트에서 '지금 당장 고쳐야 할 알려진 취약점이 있나요?'라고 질문했습니다 (Sonnet 5.5, 각 3회)
웹 검색 없음 웹 검색 있음 '웹에서 조사해 달라'고 추가
PHP의 2건을 발견함 0/3 3/3 3/3
...
검증 환경: Windows 10 / Claude Code 2.1.312 /
claude -p
/ Sonnet 5.5 /
허용된 도구는 Read・Glob・Grep (및 WebSearch・WebFetch) / 측정은 2026-10-28
3번 모두, 지식의 한계를 스스로 언급했습니다.
해당 버전의 취약점 정보가 제 지식에 없는 것일 뿐, 없다는 의미는 아닙니다. 오늘은 2026년 10월 28일이므로, 제 지식보다 이후의 권고 사항(Advisory)이 있을 수 있습니다.
PHP의 경우, 3번 모두 예시 웹사이트(PHP 8.4.26)를 8.4.27 이상으로 올리라고 권장했습니다. 다만 그 이유는 옆에 있는 관리자(admin)가 8.4.27인데 웹만 오래되었기 때문이라는 것이었습니다. 취약점을 알고 있었던 것은 아닙니다. LiteLLM은 3번 모두 해당 여부가 미확인이라는 답변이었습니다.
웹 검색을 사용할 수 있는 조건에서는, 요청하지 않아도 3번 모두 스스로 2회씩 검색했습니다. PHP의 2건은 3번 모두 CVE 번호와 수정 버전(8.4.27)과 함께 발견했습니다.
LiteLLM은 3번 중 2번이었습니다. 틀린 1번에서는 '1.107.0'을 포함하지 않고 검색하여, 다른 오래된 취약점 정보를 찾아 다음과 같이 작성했습니다.
1.107.0이라는 번호는 제가 발견한 정보와 일치하지 않습니다.
'웹에서 최신 정보를 조사한 후 답변해 달라'고 추가하자, 3번씩 검색했고, 3번 모두 LiteLLM까지 간파했습니다.
답변의 내용은 대체로 정확했습니다.
- 수정된 admin(PHP 8.4.27)을 '수정해야 한다'고 말한 것은 9회 중 0회였습니다. 웹 검색이 가능한 경우, admin은 이미 8.4.27이므로 변경할 필요가 없다고 작성했습니다.
- LiteLLM을 간파한 5번의 경우는 모두 인증 정보(이 프로젝트라면
OPENAI_API_KEY 등)를 재설정하라고 작성했습니다. - LiteLLM의 이전 버전은 4번에서 1.106.2를 언급했는데, 이는 10/21의 공지 내용과 일치했습니다.
반면, 웹 검색이 가능한 6회는 주로 보안 기업의 해설이나 요약 사이트를 근거로 했습니다. 6번 모두 공식 정보로 확인해 보라는 면책 조항을 추가했습니다.
면책 조항은 필요했습니다. LiteLLM을 간파한 1번에서는 다음과 같이 작성했습니다.
공식 측에서는 수정 버전 번호를 아직 명시하지 않았고, 저 또한 특정할 수 없습니다.
10/21의 공지는 1.106.2 등으로 고정하라고 권장하고 있어, 이는 공지와 상충됩니다. 수정된 버전은 마지막에 공식 발표로 확인하는 것이 확실합니다.
정답으로 판명된 것은 10/21 다음의 2건입니다.
PHP (CVE-2026-109618 / 109619): 8.5.12・8.4.27・8.3.36・8.2.35에서 수정되었습니다 (php.net) -
LiteLLM 1.107.0: 취약점이 아니라, 릴리스 메커니즘이 탈취되어 악성 코드가 포함된 버전이 PyPI와 Docker Hub 등에 올라왔습니다. LiteLLM의 공지는 '그보다 이전 버전은 안전하다'고 하며, 1.106.2 등으로 고정할 것을 권장하고 있습니다.
절차는 다음과 같습니다.
- 예시 프로젝트를 생성합니다 (서비스 3개)
- web:
FROM php:8.4.26-apache
(수정 전 버전) - admin:
FROM php:8.4.27-apache
(수정된 버전) - worker: requirements.txt에
litellm==1.107.0
(작성만 하고 실제로 추가하지 않음)
- web:
- "이 프로젝트의 의존성이나 베이스 이미지에, 당장 수정해야 할 알려진 취약점이 있나요? 있다면, 어떤 파일의 무엇을 어떻게 수정해야 하는지도 작성해 주세요."라고 질문함.
- 조건을 3가지로 나누어, 각각 3회씩 진행함.
- 웹 검색 및 웹 가져오기(Web Fetch) 사용 불가
- 사용 가능 (사용 여부는 Claude에 맡김)
- 사용 가능 + "웹에서 최신 정보를 조사한 후 답변해 주세요"를 덧붙임.
답은 전체 내용을 읽고 채점했습니다.
- Sonnet 5.5만 사용, 각 조건별로 3회씩 진행함.
- 예시 프로젝트는 작고, 의존성은 이 3개뿐입니다.
claude -p로 셸을 허용하지 않았습니다. 웹 검색이 없는 경우에는, 셸에서 취약점 데이터베이스(OSV)에 문의하려다 멈췄습니다. 셸을 허용한 평소 사용 방식에서는 결과가 달라질 수 있습니다. - 검색 결과는 날짜별로 변합니다. 이번 결과는 2026-10-28 기준입니다.
새로운 취약점 확인을 Claude Code에 의뢰할 때는, 웹 검색 사용이 가능하고 "최신 정보를 조사해 달라"고 한마디 덧붙이는 것이 좋습니다. 이번 결과로 볼 때, 이것이 가장 확실했습니다. 근거가 2차 정보 위주이기 때문에, 수정 버전은 마지막에 공식 공지를 통해 확인합니다.
- Claude Code의 방어적 후크(defensive hook)는, 시나리오가 깨지면 조용히 통과시킵니다. 2.1.295의
onFailure에서 멈췄습니다. — 방어 설정 측정 회차
- Claude Code의 WebFetch는, 긴 페이지의 10만 자보다 뒤를 읽지 못하고 "작성되어 있지 않다"고 답변했습니다. — Claude Code가 웹을 어떻게 읽는지 측정 회차
JQIT 엔지니어의 95% 이상은 비경험자 채용입니다.
괜찮으시다면 기업 사이트에도 방문해 주세요.
엔지니어 채용도 진행하고 있습니다. 관심이 있으시면 한번 살펴보세요.
▶ 채용 사이트