어제 저녁, 한 개발자가 새 파이썬 프로젝트를 설정하다 이상한 현상을 겪었다. 그의 노트북은 메모리 고갈로 멈췄고, 마치 포크 밤(forkbomb)이 실행된 듯했다. 그는 즉시 조사를 시작했고, 충격적인 사실을 발견했다. 인기 있는 AI 모델 추상화 라이브러리 `Litellm`의 최신 버전이 악성코드에 감염된 채 배포되었다는 소식이었다. 이 사건은 오늘 새벽 파이썬 패키지 인덱스(PyPI)를 발칵 뒤집었다.
AI 게이트웨이에 심어진 시한폭탄
문제의 핵심은 `Litellm` 패키지의 `1.82.7` 및 `1.82.8` 버전이었다. 이 버전들에는 `proxy_server.py` 파일 내부에 `base64`로 인코딩된 의문의 블롭(blob)이 삽입되어 있었다. 이 악성 코드는 설치 시 또 다른 파일을 디코딩하여 실행시키는 방식으로 작동했다. `Litellm`은 OpenAI, Anthropic, Google Gemini 등 수많은 AI 모델 API를 단일 인터페이스로 통합하는 역할을 한다. 개발자들은 이 라이브러리를 통해 AI 애플리케이션의 핵심 로직을 구축한다. 그러므로 이 라이브러리가 오염되었다는 것은, 수많은 AI 프로젝트의 근간이 흔들릴 수 있음을 의미한다.
이 사건은 단순히 한 패키지의 문제가 아니다. `Litellm`은 AI 개발의 중요한 '게이트웨이' 역할을 수행한다. 이 게이트웨이가 오염되면 AI 애플리케이션의 내부 데이터 유출, 시스템 제어권 탈취, 심지어는 AI 모델 자체의 조작까지 이어질 수 있다. 개발자들이 신뢰하고 `pip install litellm` 명령을 실행했을 때, 그들의 시스템에 침투하는 악성 코드를 unwitting하게 설치했을 가능성이 있다. 이는 AI 시대의 소프트웨어 공급망 보안에 대한 근본적인 질문을 던진다.
당신의 'pip install'은 안전한가
이번 `Litellm` 사태는 오픈소스 생태계가 안고 있는 고질적인 공급망 보안 문제의 민낯을 다시 한번 드러냈다. 개발자들은 매일 `pip`, `npm`, `cargo`와 같은 패키지 매니저를 통해 수많은 라이브러리를 설치한다. 우리는 대개 이 과정에서 배포자의 선의와 플랫폼의 보안 검증을 맹목적으로 신뢰한다. 하지만 이번처럼 누군가 패키지 유지보수 계정을 탈취하거나, 악의적인 내부자가 코드를 삽입하는 경우, 이러한 신뢰는 독으로 변한다. 특히 파이썬의 PyPI나 자바스크립트의 npm은 누구나 패키지를 배포할 수 있는 개방성 때문에 이러한 공격에 더욱 취약하다.
공격자는 `Litellm`의 중요성을 정확히 인지하고 핵심 라이브러리를 노렸다. 이는 단순히 시스템 자원을 소모하는 포크 밤을 넘어, 장기적으로 중요한 데이터를 훔치거나 시스템에 영구적인 백도어를 설치하려는 의도가 있었을 수 있다. `Tell HN` 게시물(https://github.com/BerriAI/litellm/issues/24512)에서 언급된 것처럼, 공격은 `proxy_server.py` 파일에 `base64 encoded blob`을 삽입하고 이를 디코딩하여 실행하는 방식으로 이루어졌다. 이는 전형적인 지능형 지속 위협(APT)의 초기 단계로 볼 수 있다. 한쪽에서는 AI 기술의 발전으로 새로운 애플리케이션을 빠르게 만들지만, 다른 쪽에서는 그 기반을 흔들려는 그림자 같은 공격이 끊임없이 벌어지는 긴장 관계가 존재한다.
오픈소스 의존성, 이제는 무방비가 아니다
이러한 공급망 공격은 미래에도 계속될 것이다. 특히 AI 개발이 가속화되면서 핵심 AI 라이브러리를 노리는 시도는 더욱 빈번해질 것이다. 오픈소스 생태계는 혁신의 엔진이지만, 동시에 취약성의 온상이기도 하다. 무수히 많은 의존성 패키지 중 단 하나라도 오염되면 전체 시스템이 위태로워진다. 이 문제를 해결하기 위해선 개발자들의 적극적인 참여와 플랫폼의 강력한 보안 강화가 동시에 이루어져야 한다. 단순히 '유명한 라이브러리이니 안전할 것이다'라는 막연한 믿음은 더 이상 통하지 않는다.
향후 오픈소스 생태계는 점진적으로 강화된 보안 메커니즘을 도입할 것이다. 이와 함께 개발 도구들 또한 의존성 스캐닝, 소프트웨어 구성 분석(SCA) 기능을 기본적으로 탑재하게 될 것이다. 하지만 이러한 변화는 느리게 진행된다. 그 사이에는 공격자들이 늘 한 발 앞서 나간다. 결국 당분간은 개발자 개개인의 경각심이 가장 강력한 방패가 될 것이다. 이러한 사건들을 통해 보안은 더 이상 부가적인 요소가 아니라, 개발 프로세스의 처음부터 끝까지 내재되어야 할 필수적인 부분이 됨을 우리는 깨닫는다.
지금 바로 `pip show litellm` 명령을 실행하여 설치된 `Litellm` 버전을 확인하라. 만약 설치된 버전이 `1.82.7` 또는 `1.82.8`이라면, 즉시 `pip install litellm==1.82.6` 명령으로 다운그레이드해야 한다.