처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.03.28 36

PyPI 패키지 'telnyx'가 탈취당했습니다 — 또 다시 반복되는 공급망 공격

Hacker News 원문 보기
PyPI 패키지 'telnyx'가 탈취당했습니다 — 또 다시 반복되는 공급망 공격

또 터졌습니다, PyPI 공급망 공격

파이썬 패키지를 설치할 때 pip install 한 줄이면 되니까 정말 편하죠. 그런데 이 편리함 뒤에는 언제나 "내가 설치하는 이 패키지가 정말 안전한 걸까?"라는 불안이 있어요. 이번에 그 불안이 현실이 된 사건이 또 발생했는데요, PyPI(파이썬 공식 패키지 저장소)에 등록된 telnyx라는 패키지가 공격자에 의해 탈취되어 악성 코드가 삽입된 채 배포되었어요.

Telnyx는 통신 API 플랫폼으로, 음성 통화, 문자 메시지, SIP 트렁킹 같은 통신 기능을 API로 제공하는 서비스예요. 쉽게 말해 "앱에서 전화를 걸거나 문자를 보내는 기능"을 만들 때 쓰는 SDK인 거죠. 이 공식 파이썬 SDK가 공격당한 거예요.

무슨 일이 있었나?

보안 회사 Aikido가 이 사건을 발견해서 보고했는데요, 공격자는 PyPI에 등록된 telnyx 패키지의 관리 권한을 어떤 방식으로든 탈취한 뒤, 패키지에 악성 코드를 심은 새 버전을 배포했어요. 이런 공격을 "공급망 공격(supply chain attack)"이라고 하는데, 이게 뭐냐면 소프트웨어를 직접 공격하는 게 아니라 그 소프트웨어가 의존하는 라이브러리나 도구를 공격하는 방식이에요.

비유하자면, 식당(여러분의 앱)을 직접 공격하는 게 아니라 식당에 식재료를 납품하는 업체(라이브러리)를 장악해서, 식재료에 문제가 있는 걸 섞어 넣는 거예요. 식당 입장에서는 평소처럼 재료를 받아 쓸 뿐인데, 모르는 사이에 문제가 있는 재료를 쓰게 되는 거죠.

이번 공격에서는 "teampcp"와 "canisterworm"이라는 이름으로 활동하는 공격자가 관련된 것으로 보이는데요, 패키지에 삽입된 악성 코드의 구체적인 동작은 환경 변수 탈취, 자격증명 유출 등 일반적인 공급망 공격의 패턴을 따르는 것으로 분석돼요.

왜 이런 일이 반복될까?

PyPI 공급망 공격이 이번이 처음이 아니에요. 최근 몇 년간 정말 빈번하게 발생하고 있는데요, 그 이유가 몇 가지 있어요.

첫째, PyPI의 계정 보안이 오랫동안 느슨했어요. 2FA(2단계 인증)가 최근에야 주요 패키지에 의무화되기 시작했고, 아직도 많은 패키지 관리자들이 약한 비밀번호를 쓰거나 보안 관리에 소홀한 경우가 있어요. 둘째, 패키지 탈취는 투자 대비 효과가 엄청나거든요. 인기 있는 패키지 하나만 장악하면 그걸 의존하는 수천, 수만 개의 프로젝트에 한꺼번에 영향을 줄 수 있으니까요.

셋째, 대부분의 개발자가 의존성을 버전 고정(pinning) 없이 쓰고 있어요. pip install telnyx라고만 하면 최신 버전이 설치되는데, 공격자가 올린 악성 버전이 "최신"이 되어버리면 바로 당하는 거죠.

npm, RubyGems도 마찬가지

이건 PyPI만의 문제가 아니에요. npm(JavaScript/Node.js)에서는 event-stream, ua-parser-js 같은 유명한 사건이 있었고, RubyGems에서도 비슷한 공격이 있었어요. 언어를 가리지 않고 패키지 저장소라면 모두 같은 위협에 노출되어 있는 셈이에요.

최근에는 이에 대응하기 위해 Sigstore를 이용한 패키지 서명, SLSA(소프트웨어 공급망 보안 프레임워크) 같은 표준이 도입되고 있어요. PyPI도 Trusted Publishers라는 기능을 도입해서 GitHub Actions 같은 CI/CD에서만 패키지를 배포할 수 있도록 하는 방식을 밀고 있고요. 하지만 아직 모든 패키지가 이런 보호를 받고 있지는 않아요.

한국 개발자가 당장 할 수 있는 것들

이런 뉴스를 볼 때마다 "나는 괜찮겠지" 하고 넘기기 쉬운데요, 실제로 할 수 있는 방어 조치가 몇 가지 있어요.

의존성 버전을 고정하세요. requirements.txtpyproject.toml에서 telnyx==2.1.0처럼 정확한 버전을 명시하고, 업데이트는 의도적으로만 하세요. pip freeze로 현재 환경의 전체 버전을 기록해두는 습관도 좋아요.

lock 파일을 사용하세요. Poetry의 poetry.lock이나 pip-tools의 requirements.txt (해시 포함) 같은 도구를 쓰면 패키지의 정확한 버전뿐 아니라 파일 해시까지 검증할 수 있어요.

보안 스캐너를 CI에 붙이세요. pip-audit, Safety, Snyk 같은 도구를 CI 파이프라인에 추가하면 알려진 취약 패키지를 자동으로 감지할 수 있어요. GitHub의 Dependabot도 이런 역할을 해주고요.

패키지 설치 전에 한 번 더 확인하세요. 새로운 패키지를 설치할 때는 PyPI 페이지에서 최근 릴리스 이력, 관리자 정보, 다운로드 수 등을 확인하는 습관을 들이면 좋아요.

마무리

공급망 공격은 더 이상 "남의 이야기"가 아니라 모든 개발자가 대비해야 하는 현실적인 위협이에요. 특히 pip install로 아무 생각 없이 패키지를 설치하는 습관이 있다면 지금이 바꿀 때예요.

여러분 팀에서는 의존성 보안을 어떻게 관리하고 있나요? 버전 고정이나 lock 파일 사용을 강제하고 있는지, 아니면 아직 별다른 조치 없이 쓰고 있는지 궁금해요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.