CodeQL 2.26.0의 프롬프트 주입 회귀 테스트(Regression Fixture) 구축하기
요약
CodeQL 2.26.0에서 추가된 AI 프롬프트 주입 탐지 기능을 효과적으로 활용하기 위해, 단순한 구문 테스트를 넘어 데이터 흐름 경로(data-flow path) 기반의 회귀 테스트(Regression Fixture) 구축이 중요합니다. 특히 신뢰할 수 없는 소스, 프롬프트 구성, 모델 싱크를 포함하는 템플릿을 사용해야 합니다.
핵심 포인트
- 단순 구문 대신 데이터 흐름 경로로 취약점 테스트
- 신뢰할 수 없는 소스, 프롬프트 구성, 모델 싱크 포함 필수
- SARIF만으로는 부족하며 예상 규칙과 fixture 위치를 커밋해야 함
- CodeQL CLI/액션 버전을 고정하고 CI에 기록하여 안정성 확보
GitHub는 2026년 7월 10일, CodeQL 2.26.0 버전에서 AI 프롬프트 주입 탐지 기능이 추가되었다고 발표했습니다. 쿼리를 활성화하는 것도 유용하지만, 회귀 테스트를 소유하는 것이 더 좋습니다.
주요 출처: GitHub Changelog, 2026년 7월 10일.
아래 예시는 제가 테스트한 저장소의 결과가 아니라 구현 템플릿입니다.
구문(Phrase)이 아닌 경로(Path)를 모델링하세요
유용한 fixture는 신뢰할 수 없는 소스, 프롬프트 구성, 그리고 모델 싱크(model sink)를 포함해야 합니다:
security-fixtures/prompt-injection/
├── positive/direct-flow.ts
├── positive/helper-flow.ts
...
ignore previous instructions라는 문자 그대로의 구문을 테스트하지 마십시오. 정적 분석은 데이터 흐름 경로(data-flow path)가 필요합니다. 프로덕션 스택에서 지원되는 SDK 호출을 유지하여 CodeQL이 싱크를 인식할 수 있도록 하세요.
// 의도적으로 취약한 fixture입니다. 이 경로는 절대 배포하지 마십시오.
import { model } from "./supported-client";
...
값을 헬퍼(helper)를 통해 전달하는 두 번째 positive 케이스를 추가하십시오. 그런 다음 공격자 입력이 지침을 선택하거나 변경할 수 없는 negative control을 추가하십시오. sanitize()라는 이름의 함수는 정제화(sanitization)의 증거가 아닙니다.
SARIF 증거 단언하기(Assert Evidence)
SARIF만 업로드한다고 해서 회귀 게이트(regression gate)가 생성되는 것은 아닙니다. 예상 규칙과 fixture 위치를 커밋하십시오:
{
"required": [
{
...
규칙 ID는 CodeQL 2.26.0 문서나 관찰된 SARIF 결과에서 복사할 때까지 플레이스홀더로 유지하십시오. 기계가 사용하는 식별자(Machine-facing identifiers)는 절대 추측해서는 안 됩니다.
작은 단언문(assertion)을 사용하여 runs[].results[].ruleId와 각 물리적 위치를 이 파일과 비교할 수 있습니다. 필수 경고가 사라지거나 negative fixture가 알림을 보내기 시작하면 실패하도록 하십시오. 저장소의 총 알림 개수를 단언하지 마십시오. 관련 없는 코드 변경은 이를 취약하게 만듭니다.
| 업그레이드 후 결과 | 조치 |
|---|---|
| 필수 알림 유지 | 일반 검토 계속 |
| ... | |
| CodeQL CLI 또는 액션 버전을 고정하고, 이를 CI에 기록하며, 임시 데이터베이스에서 픽스처를 실행하십시오. 또한 런타임 적대적 테스트도 유지하십시오: 정적 분석은 모델이 어떻게 반응할지 증명할 수 없으며, 사용자 정의 래퍼(wrapper)나 지원되지 않는 SDK는 모델링되지 않을 수 있습니다. |
목표는 의도적으로 좁습니다: 중요한 신뢰할 수 없는-모델 경로를 변경 로그 체크박스가 아닌 실행 가능한 리포지토리 계약으로 만드십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기