
GitLab Duo DevSecOps 루프로, 두 번째 AI가 AI가 작성한 모든 수정 사항을 다시 공격하고, 성공한 각 우회를 CI와 프로덕션에서 재생되는 영구 항체로 저장합니다.
AI가 작성한 모든 코드 변경은 프로덕션에 도달하기 전에, 증거와 함께 두 번째 AI의 공격을 견뎌내야 합니다.

Antibody는 "Life After Code"(Transcend) 해커톤을 위한 GitLab Duo 파이프라인입니다. 코드베이스를 면역 체계처럼 다룹니다. 한 AI가 취약점을 수정하면, 두 번째 AI가 그 수정이 실제로 유효할 때까지 계속 공격하며, 한 번이라도 성공했던 모든 공격은 "항체"로 영구히 저장되어 이후의 모든 변경과 라이브 프로덕션에 대해 재검증됩니다. 별도의, 의도적으로 AI가 아닌 검사기가 수정 에이전트의 부정행위를 감시합니다.
수정 에이전트의 말은 결코 신뢰되지 않습니다. 공격자를 견뎌내야 하며, 단순하고 정직한 검사기가 테스트를 지킵니다.
AI가 AI를 공격하는 도구는 이미 존재합니다(Helios, MindFort, Strix, Novee). 그것들은 원래의 익스플로잇이 이제 차단되었음을 확인합니다. Antibody는 2026년 현재까지도 여전히 연구 논문에만 존재하는 네 가지를 수행합니다:
/download가 취약했다면, /preview에 동일한 누락된 가드가 있는지 확인합니다 — 버그는 보통 diff 밖의 라우트에 숨어 있습니다.CODEOWNERS를 건드리면 파이프라인은 스스로 Hands-off에서 Supervised로 전환됩니다. 변경은 결코 스스로를 검증해서는 안 되기 때문입니다.모든 설계 선택은 추측이 아닌 논문으로 거슬러 올라갑니다:
| 발견 | 논문 | 수치 |
|---|---|---|
| 패치는 테스트를 통과하지만 여전히 익스플로잇 가능("조용한 실패"); LLM 리뷰어는 이를 놓침 | When Passing Tests Hides Vulnerabilities (Tampere) — arXiv 2609.10548 | 1,030개의 수리 추적 중 170개가 조용히 실패; 22개는 심각 |
| 수정은 테스트된 페이로드만 차단함 | P2Patch (Simon Fraser) — arXiv 2610.20245 | 새로운 공격이 이미 "수정된" 패치를 **41%**의 실행에서 우회; 우회를 영구화하자 커버리지가 42.1% → 62.5%로 상승 |
| 동일한 버그가 diff 밖의 형제 라우트에 숨어 있음 | PRGuard (Bristol) — arXiv 2608.25730 | 상용 리뷰어보다 3배 더 많은 부재 유형 버그 발견 |
| 에이전트 CI 변경이 리뷰 없이 병합됨 → "순환 검증" | Co-Modifying Code and Infra (UNSW) — arXiv 2610.12849 | 이중 범위 에이전트 PR의 **43–56%**가 리뷰 없이 병합됨 |
| 에이전트는 초록불에 보상받을 때 채점자를 속임 | Hacktrace (NTU) — arXiv 2610.03055 | 실행의 약 **19.5%**가 테스트 조작 지름길을 택함 |
마지막 발견이 Warden이 AI가 아닌 이유입니다: LLM 리뷰어는 판결에서 설득될 수 있지만, git-diff 검사기는 그럴 수 없습니다.
┌─────────────────────────── issue created ───────────────────────────┐
│ │
▼ │
[Builder AI] fix on a shadow branch, open MR │
│ │
▼ │
GitLab SAST + Dependency Scanning → findings become the Red agent's targets │
│ │
▼ │
[Red AI] real HTTP exploit that REPRODUCES on the old code │
│ │
▼ │
[Builder AI] harden until blocked │
│ │
▼ │
[Red AI] re-attack the NEW fix: new payload + same bug on SIBLING routes │
│ every bypass saved forever as an antibody (≤2 rounds) │
▼ │
[Warden] (not an AI) no deleted/weakened/skipped tests, no hidden CI/auth edit │
│ │
▼ │
autonomy gate: touches CI/auth/CODEOWNERS → Supervised, else Hands-off │
│ │
▼ │
[Package] signed container + SBOM + proof bundle │
│ │
▼ │
[Release → Configure] deploy to the lowest-carbon Cloud Run region, │
│ replay every antibody against staging, then promote │
▼ │
[Monitor] scheduled probe replays ALL antibodies against production forever ──┘
any reproduction → auto-opens an incident issue → loop restarts
아래의 모든 내용은 목업이 아니라 이 저장소에서 실제로 캡처한 것입니다.
9단계 파이프라인, GitLab에서 모두 통과. 실행된 모든 단계가 통과했으며, 프로젝트 레지스트리에 푸시된 실제 컨테이너 빌드도 포함됩니다. configure와 monitor는 Cloud Run 프로젝트와 스케줄이 구성될 때까지 올바르게 건너뜁니다. 파이프라인 열기.

소유한 디코이에 대한 공격은 차단되고, 정상 사용은 여전히 동작합니다. 인코딩된 경로 순회, 형제 라우트, 비HTTP 스킴, 교차 사용자 객체 읽기가 모두 거부되는 반면, 정당한 문서와 소유자 본인의 주문은 정상적으로 제공됩니다.

Warden이 에이전트의 부정행위를 잡아냅니다. 일회용 클론에서의 세 가지 실제 커밋: 테스트 삭제는 차단되고, 앱 수정에서 파이프라인을 편집하면 Supervised로 하향되며, 정직한 수정은 통과합니다.

형제 쌍으로 그룹화된 대상 앱의 API. 각 버그 클래스는 하나의 강화된 헬퍼를 공유하는 두 라우트에 위치하며, 이는 바로 형제 라우트 사냥이 찾는 대상입니다.

전체 스위트: 기능 테스트, 여섯 개의 항체, MCP 도구, Warden, 그리고 SCI 계산.

| 이름 | AI? | 역할 |
|---|---|---|
Builder (agents/antibody_builder.yaml) | 예 | 이슈를 읽고, 섀도 브랜치에 수정 사항을 작성하며, 공격받으면 강화합니다. |
Red (agents/antibody_red.yaml) | 예 | 실제 익스플로잇을 작성하고, 수정 사항을 재공격하며, 형제 라우트를 사냥하고, 항체를 저장합니다. |
GreenOps (agents/antibody_greenops.yaml) | 예 | 보안과 무관한 변경에는 비용이 큰 루프를 건너뛰고, 저탄소 리전을 선택하며, SCI를 계산합니다. |
Planner (agents/antibody_planner.yaml) | 예 | 명세와 보안 수용 기준을 작성하고, 최종 govern 감사를 게시합니다. |
Warden (warden/warden.py) | 아니오 — 순수 Python | 테스트 변조와 숨겨진 범위 확장을 결정론적으로 탐지합니다. 프롬프트 인젝션이 불가능합니다. |