취약점 탐지 결과가 많다고 보안 검토가 빨라지는 것은 아니다. 병목은 의심스러운 코드의 재현 가능성, 실제 영향, 수정 우선순위, patch의 안전성을 판단하는 구간에 있다. 이를 생략하면 탐지 건수와 검토 대기열만 함께 늘어난다.
OpenAI는 2026년 3월 6일 Codex Security cloud를 research preview로 공개했다. 저장소별 system context와 편집 가능한 threat model을 만들고, 발견한 후보를 가능한 경우 격리 환경에서 검증하며, 시스템 의도에 맞는 patch를 제안하는 제품이다.[1][2] 발표 당시 제공 대상은 ChatGPT Pro·Enterprise·Business·Edu 고객이었고, Codex web을 통해 순차 rollout됐다. 이 가운데 Enterprise·Business·Edu는 향후 며칠에 걸쳐 접근 범위를 확대한다고 안내됐다.[1] 이 글이 주목하는 대상은 또 하나의 scanner가 아니라 candidate → reproduction → impact → priority → patch/disclosure review로 이어지는 검토 계약이다.
현재 cloud 제품은 GA가 아니라 research preview다.[1][2] 공식 FAQ도 SAST와 수동 보안 검토를 대체하지 않는다고 명시한다.[4] 자동 merge 승인자나 SAST·DAST·SCA 대체재로 두어서는 안 된다. 후보 수집·재현·수정안 초안은 자동화하되 위험 수용과 변경·공개 승인은 사람이 맡아야 한다.
제품 경계도 구분해야 한다. 이 글의 탐지·검증·제안 patch 설명은 연결된 GitHub 저장소를 스캔하는 cloud 경로를 기준으로 한다.[2][4] 반면 뒤에서 인용하는 fix와 vulnerability write-up은 Codex Security plugin 경로의 기능과 절차다.[6][7] Plugin 문서를 cloud가 동일하게 제공하는 기능의 근거로 쓰지 않고, 두 경로의 산출물을 조직의 검토 계약으로 연결하는 운영 참고 자료로만 사용한다.
Finding이 아니라 상태 전이를 관리한다
Finding을 제목·심각도·파일 위치로만 저장하면 무엇이 확인됐는지 알기 어렵다. 아래 5단계와 승격 조건은 Codex Security의 공식 상태 체계가 아니라, 제품 산출물을 내부 검토에 연결하기 위한 이 글의 운영 제안이다.
| 상태 | 필요한 증거 | 승격 조건 |
|---|---|---|
| Candidate | 의심 코드, source-to-sink, 깨질 보안 불변 조건 | 공격자 입력과 도달 경로가 설명됨 |
| Reproduction | 명령, 환경, exit code, 로그, artifact | 재현 결과 또는 실패 이유가 기록됨 |
| Impact | 필요 권한, 영향 자산, tenant·데이터 경계 | 가능성과 확인된 영향을 분리함 |
| Priority | severity, confidence, reachability, exposure | SLA와 owner가 정해짐 |
| Patch/Disclosure review | 최소 diff, 회귀·우회 검사, 공개 초안 | 사람이 적용·비공개 보고·보류를 결정함 |
validated는 취약점의 모든 면이 확정됐다는 만능 값이 아니다. 특정 revision과 환경에서 특정 reproducer가 성공했다는 뜻이어야 한다. 재현 실패도 곧 false positive는 아니다. 의존 서비스, fixture, build, 플랫폼 차이 때문에 확인하지 못했을 수 있다. 공식 문서도 auto-validation 실패 시 finding을 unvalidated로 남기고 시도한 로그를 검토할 수 있다고 설명한다.[4]
1. Candidate: 저장소별 context를 검토 가능한 입력으로 만든다
Codex Security cloud는 연결된 GitHub 저장소를 commit 단위로 살피고, 저장소 context를 구성해 가능성 있는 문제를 찾는다.[2] 일반 취약 패턴에 곧바로 severity를 붙이기보다 저장소가 무엇을 신뢰하고 어디에 노출되는지를 우선 요약하는 흐름이다.
초기 threat model은 코드에서 생성되지만 확정본은 아니다. 현재 공식 문서의 편집 경로는 Codex Security scans에서 저장소를 연 뒤 Edit 클릭이다.[3] 같은 문서는 entry point와 untrusted input, trust boundary와 인증 가정, 민감 데이터 경로, privileged action, 우선 검토 영역을 보정하라고 안내한다. Threat model은 이후 scan context와 우선순위를 바꾸는 입력이다.[3]
저장소 owner와 보안팀은 실제 entry point, 사용자·tenant·관리자 경계, 인증 가정, 민감 자산, 외부에서 도달하지 않는 code를 함께 보정해야 한다. Finding에는 repo, commit, threat_model_version, candidate_id를 남겨 model 변경에 따른 criticality 변화를 추적한다. 이는 제품의 공식 schema가 아니라 조직이 추가하는 metadata다.
2. Reproduction: sandbox 결과를 증거 묶음으로 다룬다
공식 FAQ에 따르면 분석과 검증 job은 임시 격리 container에서 실행되고 저장소를 일시적으로 clone한다. Auto-validation은 가능한 경우 후보 재현을 시도하고, 실패하면 finding을 unvalidated로 남기며 시도한 로그를 검토할 수 있게 한다.[4] 프로젝트에 맞춘 환경이 있으면 실행 시스템의 맥락에서 후보를 검증하고 작동하는 PoC를 만들 가능성도 높아진다.[1]
Sandbox는 결론이 아니라 재현 조건이다. 다음 증거 묶음은 Cloud FAQ가 보장하는 고정 output schema가 아니라, 재검토 가능성을 높이기 위한 운영 제안이다.
finding_id / repository / commit
container 또는 environment 식별자
build·seed·reproduction 명령과 순서
fixture, feature flag, dependency version
exit code / stdout / stderr / test artifact
관찰한 보안 불변 조건의 위반
검증하지 못한 조건과 외부 의존성
실제 고객 데이터·장기 credential·승인되지 않은 외부 target은 제외하고 외부 서비스는 mock이나 승인된 test tenant로 대체한다. 운영 결과는 이 글이 제안하는 reproduced, not_reproduced, blocked_by_environment, inconclusive로 나눈다. 제품의 공식 status가 아니다. not_reproduced에도 시도한 경로를 남긴다.
3. Impact와 Priority: severity보다 공격 계약을 쓴다
재현 성공만으로 영향이 정해지지는 않는다. 같은 path traversal이라도 인증 없는 public endpoint와 관리자 전용 offline tool의 우선순위는 다르다. 반대로 짧은 경로라도 tenant 경계를 넘거나 signing key에 닿으면 높은 우선순위가 될 수 있다.
Impact review에는 네 가지를 강제한다.
- Actor: 어떤 권한과 위치의 공격자인가.
- Path: 어떤 입력이 어느 trust boundary를 지나 sink에 닿는가.
- Invariant: 지켜져야 할 인증·격리·무결성 조건은 무엇인가.
- Consequence: 확인된 읽기·쓰기·권한 상승·중단 범위는 어디까지인가.
Priority는 vendor severity를 복사하지 않고 impact × reachability × confidence × exposure에 자산 중요도와 SLA를 결합해 결정한다. Recommended Findings와 상세 화면의 impact reasoning, code·call path, validation output은 triage 입력이지 최종 risk acceptance가 아니다.[5]
OpenAI는 private beta의 한 저장소 사례에서 noise가 초기 대비 84% 줄었다고 발표했다. 과대평가된 severity를 가진 finding 비율이 90% 이상, detection false positive rate는 전체 저장소에서 50% 이상 감소했다고 밝혔다.[1] 모두 OpenAI가 운영한 beta의 vendor-reported 결과다. 84%는 cohort 평균도 독립 benchmark도 아니므로 일반화할 수 없다. 내부 pilot에서는 재현 성공률, inconclusive 비율, severity 수정률, 실제 수정률, finding당 검토 시간을 측정해야 한다.
4. Patch: 생성보다 검토 계약이 중요하다
공식 문서는 remediation이 가능할 때 파일과 line context를 포함한 최소 actionable diff를 제안한다고 설명한다.[4] 그러나 patch는 저장소를 자동 변경하지 않는다. Cloud workflow에서도 사람이 diff를 검토한 뒤 PR로 보낼 수 있고 자동 적용되지 않는다.[4]
Patch gate는 다음 순서를 지킨다.
- 원래 reproducer가 수정 후 실패하는지 확인한다.
- 정상 동작을 보존하는 focused regression test를 실행한다.
- 다른 encoding과 alternate entry point로 우회를 확인한다.
- broad refactor, 무관한 cleanup, 기존 통제 약화가 없는지 읽는다.
- 성능·호환성·migration 영향과 rollback을 검토한다.
- code owner와 security reviewer가 승인한다.
별도 Codex Security plugin의 fix workflow는 accepted finding에서 focused patch와 회귀 coverage를 만들고, 원래 reproducer와 정상 동작, 주변 bypass, 관련 test를 다시 확인하라고 안내한다. 검증 성공이 finding을 자동으로 닫지도 않는다.[6] 이는 cloud 기능 설명이 아니라 cloud가 제안한 diff에도 적용할 검토 절차다. “PoC가 더는 성공하지 않음”은 필요조건이지 충분조건은 아니다.
5. Disclosure: patch와 공개를 자동으로 묶지 않는다
외부 프로젝트나 배포된 제품은 수정과 공개 순서가 민감하다. 보고서에는 공격자 입력부터 깨진 불변 조건과 영향까지의 경로, affected revision, 최소 source excerpt, 재현 절차와 대표 출력, 안전 제한을 포함한다. 별도 Codex Security plugin이 fix diff를 제공할 수 있는 경우에는 이를 보고서에 첨부하는 것을 이 글의 운영 제안으로 둔다. 이 write-up 생성 절차와 안전 지침은 cloud 기능이 아니라 plugin 문서에 있다. Plugin 문서는 검증된 사실과 가설·미해결 제약을 구분하고, public 또는 production target은 정확한 대상에 대한 명시적 승인 없이 시험하지 말라고 요구한다.[7]
Disclosure gate에서는 security contact, affected version, private advisory, PoC 노출 범위, downstream 통지, embargo, CVE 요청 순서를 사람이 결정한다. 에이전트는 초안만 만든다. report_ready와 disclosure_approved를 나누고 대상·본문·가시성·artifact를 승인 시점에 고정한다.
결론
Codex Security의 가치는 finding 수보다 저장소별 threat model, 재현 증거, 영향과 우선순위, 검토 가능한 patch·disclosure 자료를 연결하는 데 있다. 이 흐름을 상태 계약으로 만들면 출력은 “믿을 보고서”가 아니라 “검토할 사건 기록”이 된다.
Research preview라는 상태와 책임 경계도 유지해야 한다. Codex Security는 SAST와 사람의 판단을 보완하고 patch를 제안하지만 자동 적용하지 않는다.[4] OpenAI의 noise 감소 수치는 beta cohort의 공급자 보고 결과이므로 내부 workload로 재검증해야 한다.[1]
성공 기준은 자동 발견·수정 건수가 아니다. Candidate의 승격 근거, impact의 trust boundary, priority 승인자, patch의 공격·정상 동작 검증, disclosure 대상과 시점을 추적할 수 있어야 한다. 자동화할 것은 증거 수집과 반복 검증이고, 인간에게 남길 책임은 위험 판단과 변경·공개의 승인이다.
Sources
[1] https://openai.com/index/codex-security-now-in-research-preview — Codex Security: now in research preview [2] https://developers.openai.com/codex/security — Codex Security [3] https://developers.openai.com/codex/security/threat-model — Improving the threat model [4] https://developers.openai.com/codex/security/faq — Codex Security cloud FAQ [5] https://developers.openai.com/codex/security/setup — Codex Security cloud setup [6] https://developers.openai.com/codex/security/plugin/fix-findings — Fix and verify security findings [7] https://developers.openai.com/codex/security/plugin/vulnerability-reports — Write vulnerability reports