한 줄 요약

npm과 PyPI(파이썬 패키지 저장소)에 공개된 MemTensor의 정식 패키지 두 개가 공격자에게 침해당해, 악성 코드가 몰래 심어졌습니다. 해당 패키지를 설치한 개발자나 자동화 파이프라인(CI/CD)은 **sckit**이라는 자격증명 탈취 악성 프로그램에 감염될 수 있으며, AWS 키·GitHub 토큰·PyPI 토큰·SSH 키 등 민감한 비밀 정보가 외부 서버로 유출됩니다. 공격자는 MemTensor의 GitHub Actions 워크플로우를 악용해 배포 토큰을 가로채는 방식으로 공식 패키지에 악성 버전을 등록했습니다. 감염된 패키지는 자체 증식 기능도 갖춰 다른 npm·PyPI 패키지나 GitHub Actions 워크플로우로 퍼질 수 있습니다. 해당 패키지를 사용 중이라면 즉시 안전한 버전으로 고정하고, 노출된 모든 시크릿(비밀 키·토큰)을 교체해야 합니다.

사건

공격자가 MemTensor의 npm 패키지(@memtensor/memos-cloud-openclaw-plugin)와 PyPI 패키지(MemoryOS)에 악성 버전을 게시해 Go 기반 자격증명 탈취 악성코드 sckit을 배포했다. 악성 버전은 0.1.21·0.1.23·0.1.25(npm)와 2.0.34(PyPI)이다.

영향

감염 시 AWS 액세스 키, GitHub·GitLab·npm·PyPI 토큰, SSH 비밀키, Hugging Face·HashiCorp Vault·Slack·Stripe·SendGrid 키, JWT, 환경변수 내 패스워드·API 키 등이 외부 C2 서버(skyleen[.]fr)로 유출된다. 악성코드는 자체 증식 기능으로 다른 패키지와 CI 워크플로우에 재전파될 수 있다.

원인

공격자가 MemTensor의 GitHub Actions 릴리스 파이프라인에 악의적인 커밋을 푸시해 워크플로우가 npm·PyPI 발행 토큰을 노출하도록 유도했고, 이 토큰으로 악성 버전을 공식 저장소에 등록했다.

대응

npm 패키지는 0.1.20 버전, PyPI 패키지는 2.0.33 버전으로 고정(pin)하고, 노출 가능성이 있는 모든 시크릿을 즉시 교체해야 한다. sckit 프로세스를 종료하고 skyleen[.]fr 및 전체 서브도메인을 방화벽에서 차단해야 한다.

실무 포인트

공급망 공격은 정식 패키지에 악성 버전을 끼워 넣는 방식이므로 패키지 버전을 특정 안전 버전으로 고정(lockfile·pinning)하는 것이 핵심 방어책이다. CI/CD 환경에서 주입되는 토큰·시크릿은 패키지 코드에도 노출될 수 있으므로 최소 권한 원칙을 적용하고 정기적으로 토큰을 교체해야 한다.

본문

Ravie Lakshmanan · 2026년 9월 23일 · 악성코드 / 클라우드 보안

신원 불명의 위협 행위자가 npm과 PyPI(파이썬 패키지 인덱스) 저장소에 등록된 MemTensor의 정식 패키지 두 개를 침해해, Windows·Linux·macOS를 모두 겨냥한 Go 기반 임플란트 sckit을 배포한 것으로 확인됐다.

Aikido, SafeDep, Socket, StepSecurity의 보고서에 따르면, 문제가 된 패키지는 다음과 같다.

  • @memtensor/memos-cloud-openclaw-plugin 버전 0.1.21, 0.1.23, 0.1.25 (버전 0.1.22와 0.1.24는 정상)
  • MemoryOS 버전 2.0.34 (현재 PyPI에서 격리 조치됨)

StepSecurity는 악성 npm 패키지 버전에 대해 "정식 AI 메모리 통합 패키지에 숨겨진 Go 페이로드가 삽입됐으며, 버전 0.1.21·0.1.23·0.1.25는 에이전트 게이트웨이가 시작될 때와 플러그인이 메모리 회상(recall) 이벤트를 처리할 때마다 해당 페이로드를 실행하는 코드를 포함하고 있다"고 밝혔다.

"런처는 호스트 프로세스 환경을 악성 실행 파일에 그대로 전달하고, 회상 과정에서는 사용자의 프롬프트 텍스트까지 직접 전달한다."

PyPI 패키지의 경우 memos 모듈이 애플리케이션에 임포트되는 즉시 정적 링크된 Go 바이너리가 실행된다.

어느 생태계를 표적으로 삼든 최종 목적은 동일하다. 클라우드 서비스, 소스코드 플랫폼, 패키지 레지스트리, 개발자 도구에서 민감한 데이터를 수집하고 외부 서버(skyleen[.]fr)로 유출하는 크로스플랫폼 자격증명 탈취 페이로드를 실행하는 것이다.

Socket에 따르면 탈취 대상은 npm, PyPI, GitHub, GitLab, AWS, Vault, SSH 시크릿 등이며 구체적으로는 다음과 같다.

  • 자격증명 파일(.npmrc, .vault-token, id_ecdsa, credentials.db, access_tokens.json, 저장된 토큰 파일)
  • 토큰·패스워드·API 키·개인 키·세션 쿠키·데이터베이스 또는 메시지 브로커 연결 문자열 등을 담은 환경 변수(예: NPM_TOKEN, PYPI_API_TOKEN)
  • AWS 액세스 키, GitHub·GitLab 토큰, npm·PyPI 토큰, Hugging Face, HashiCorp Vault, Slack, Stripe, SendGrid 키, JWT

SafeDep는 이번 공급망 공격 분석에서 "공격자가 MemTensor의 GitHub Actions 릴리스 파이프라인에서 워크플로우가 npm 또는 PyPI 토큰을 노출하도록 유도하는 커밋을 푸시하는 방식으로 발행 토큰을 탈취했다"고 밝혔다.

임플란트를 심층 분석한 결과, GitHub 및 npm·PyPI 패키지 직접 게시를 통해 자체 증식이 가능한 웜(worm) 기능도 갖춘 것으로 나타났다. 현재로서는 MemTensor 외에 침해된 패키지가 더 있는지 불분명한 상황이다.

SafeDep는 "이 악성코드는 개발자 머신과 CI 작업 모두에서 자격증명을 수집한다. C2(명령 및 제어) 서버로부터 서명된 작업을 수신하며, npm 패키지·파이썬 패키지·GitHub Actions 워크플로우에 자신을 설치하는 템플릿도 내장하고 있다"고 설명했다.

악성 버전의 npm 패키지가 아직 다운로드 가능한 상태이므로, 패키지를 안전한 기준 버전(npm 패키지는 0.1.20, PyPI 패키지는 2.0.33)으로 고정하고, 노출된 시크릿을 교체하며, sckit 프로세스를 종료하고, skyleen[.]fr 및 모든 서브도메인을 차단하는 조치가 반드시 필요하다.

StepSecurity는 "MemOS Cloud 플러그인은 OpenClaw 에이전트 런타임을 메모리 서비스에 연결한다. 평상시 작업에는 에이전트가 프롬프트를 처리하기 전 관련 메모리를 회상하고, 실행 후 메모리를 추가하는 과정이 포함된다. 이 패키지는 Clawdbot과 Moltbot 런타임의 통합 지점도 선언하고 있다"고 밝혔다.

"이로 인해 플러그인은 사용자 입력을 상시 처리하고 중요한 자격증명을 상속받을 수 있는 프로세스 내부에 위치하게 된다. 개발자 워크스테이션에서는 동일한 사용자 계정이 클라우드 설정, 소스 저장소, 패키지 발행 토큰, 애플리케이션 시크릿에 접근 권한을 가질 수 있다. 자동화 환경에서는 해당 프로세스가 특정 작업을 위해 주입된 자격증명을 수신받을 수도 있다."

출처
The Hacker News · thehackernews.com
원문 보기

분야별 뉴스

관심 분야의 보안 이슈를 모아 보세요.

TORUN SECURITY

투런이 제공하는 보안 솔루션

공격 표면 관리부터 엔드포인트·내부정보 보호까지, 기업 환경에 맞는 보안 솔루션을 투런이 함께 설계합니다.