AI 코드 어시스턴트가 존재하지 않는 패키지 이름을 내뱉고 있으며, 공격자들은 이러한 환각(hallucination) 현상을 실제 공급망 리스크로 악용하고 있습니다.

Lasso Security의 보안 연구원 Bar Lanyado가 AI 기반 코딩 도구에 Python 클라이언트를 요청했을 때, 모델은 huggingface-cli를 설치하라고 제안했습니다. 하지만 이 패키지는 유령 패키지입니다. 실제 라이브러리는 huggingface_hub라는 이름으로 존재합니다. 위험성을 증명하기 위해 Lanyado는 PyPI(Python Package Index)에 해당 가짜 이름을 빈 플레이스홀더로 등록했습니다. 3개월 만에 이 플레이스홀더는 30,000회 이상의 다운로드를 기록했으며, 공개 문서에 등장하고 심지어 Alibaba의 저장소에서 수집된 코드 샘플에도 나타났습니다.

유령 패키지가 실제 위협이 되는 과정

  1. 프롬프트 → 환각 – 개발자가 AI에게 도움을 요청합니다. 노이즈가 많은 인터넷 데이터로 학습된 모델은 그럴듯하게 들리는 패키지 이름을 지어냅니다.
  2. 복사-붙여넣기 → 문서화 – 제안된 이름이 README, Stack Overflow 답변 또는 내부 위키에 기록됩니다. 한 번 기록되면 그 이름은 커뮤니티를 통해 확산됩니다.
  3. 코드 통합 – AI를 신뢰한 개발자가 해당 이름을 requirements 파일에 추가하고 프로덕션 환경에 배포합니다.

기존 방어 체계가 이 문제를 놓치는 이유

정적 분석 도구와 취약점 스캐너는 알려진 CVE와 출시 이력이 있는 라이브러리를 탐색합니다. AI의 제안이 있기 전까지 다운로드 수가 0이었던 갓 출시된 패키지는 CVE도 없고 평판도 없기 때문에 깨끗한 것으로 간주됩니다. 표준적인 "해당 버전이 취약한가?"라는 체크 결과는 '거짓(false)'으로 나타나며, 이는 개발자에게 잘못된 안전감을 줍니다.

이번 실험이 증명하는 것

  • AI가 지어낸 이름이 프로덕션에 도달함 – 30,000회 이상의 다운로드는 개발자들이 실제로 이러한 유령 패키지를 가져다 쓰고 있음을 보여줍니다.
  • 환각이 문서가 됨 – 가짜 이름이 공개 가이드에 한 번 등장하면 무기한 지속되며 오류를 확산시킬 수 있습니다.
  • 등록이 매우 쉬움 – PyPI에 패키지를 게시하는 데는 비용이 들지 않고 몇 분이면 충분하므로, 공급망 악용에 대한 장벽이 매우 낮습니다.

실제로 효과적인 방어 단계

  • 모든 종속성 검증 – 새로운 요구 사항을 추가하기 전에 패키지 인덱스를 검색하여 이름이 기존의 문서화된 라이브러리와 일치하는지 확인하십시오.
  • 공식 소스와 교차 확인 – 제안된 이름을 벤더의 저장소나 공식 설치 가이드와 비교하십시오.
  • 신규 및 사용률이 낮은 패키지를 고위험으로 취급 – 다운로드 수가 매우 적거나 출시된 지 얼마 되지 않은 종속성은 수동 검토 대상으로 분류하십시오.

향후 주의 깊게 살펴볼 점

결론은 간단합니다. AI의 제안은 보증 수표가 아닙니다. 모든 새로운 종속성을 검증되지 않은 제3자 구성 요소로 취급하고, 출처를 확인하며, 유령 패키지가 프로덕션 환경에 유입되기 전에 공급망을 면밀히 감시하십시오.