분석이 이해하는 라이브러리와 코드 패턴 확대
GitHub는 CodeQL 2.27.2가 C++ 정규식과 여러 언어의 데이터 흐름 분석을 개선했다고 발표했다. C++에서는 std::regex의 ECMAScript 문법을 파싱하고 Comdb2 C API의 SQL 주입 관련 목적지 모델을 추가했다. Go에는 github.com/coder/websocket 경로 지원이, Rust에는 await로 사용하는 비동기 블록의 데이터 흐름과 TLS 라이브러리의 흐름 요약 개선이 포함됐다.
JavaScript와 TypeScript에서는 Workflow SDK의 use workflow·use step 지시문을 인식하고 Hapi의 사용자 정의 라우트 등록과 고차 함수에서 요청 입력 추적을 개선했다. 공식 변경 기록에 따르면 기본 쿼리 묶음은 보안 쿼리 498개로 CWE 170종을 다루며 확장 묶음은 쿼리 131개와 추가 CWE 32종을 제공한다. 이 숫자는 분석 규칙의 범위이며 취약점 탐지 성공률은 아니다.
Go 사용자 쿼리가 확인해야 할 구조 변경
이번 버전의 Go 제어 흐름 그래프는 공용 CFG 라이브러리를 사용하도록 바뀐다. 할당과 매개변수·반환 값, range와 지연 호출 등에 노드가 추가되고 진입점에서 도달할 수 없는 노드는 제외된다. 노드와 간선, 위치·텍스트 표현, 기본 블록의 경계가 달라지므로 이전 표현에 의존한 사용자 쿼리는 수정이 필요할 수 있다고 GitHub는 설명했다.
공식 기록은 BasicBlocks::Cfg 제거와 ControlFlow::EntryNode·ExitNode 추가를 명시한다. IfStmt.getCond는 getCondition을 사용하도록 대체되며, IfStmt.getThen과 LoopStmt.getBody의 반환 타입도 Stmt로 변경된다. 이는 제품 화면의 변경만이 아니라 쿼리를 작성하는 사람이 사용하던 라이브러리 인터페이스의 변경이다.
macOS와 Xcode 조합에 따라 추적 빌드 제한
GitHub는 macOS 27에서 Xcode 버전과 관계없이, 또 macOS 26에서 Xcode 27을 선택했을 때 컴파일 언어의 autobuild와 manual 모드를 지원하지 않는다고 밝혔다. 해당 환경에서 추적 분석에 필요한 다중 아키텍처 바이너리가 제공되지 않는다는 설명이다. 이 빌드 모드를 사용하려면 macOS 26과 Xcode 26 이하의 지원 조합을 사용하도록 안내했다.
build mode none의 macOS 지원 개선은 진행 중이라고 소개됐으며 현재 완성된 대안으로 발표되지 않았다. 배포에서도 GitHub.com 코드 스캐닝에는 새 버전이 자동 제공되지만 GitHub Enterprise Server는 향후 릴리스에 포함될 예정이다. 이전 GHES에서는 CodeQL 버전을 수동 업그레이드할 수 있다고 안내해, 호스팅 환경별 적용 시점을 구분했다.
새 분석 결과는 규칙과 실행 성공을 함께 보기
ARCH.B의 관점에서 분석 엔진을 올릴 때 먼저 확인할 것은 스캔이 완료됐는지와 어떤 규칙을 실행했는지다. 경고 수가 줄어도 수정의 결과인지 분석 환경이 바뀌어 코드 추출이 실패한 것인지 구분해야 한다. 반대로 새로운 라이브러리 모델이 입력 흐름을 더 잘 이해하면서 경고가 늘 수 있으므로, 이전 버전과 동일한 코드에서 대표 경로를 비교하는 편이 도움이 된다.
Go용 사용자 쿼리가 있다면 명칭만 바꾸는 것으로 검증을 끝내기 어렵다. CFG의 도달 가능성과 블록 경계가 바뀌면 쿼리가 찾는 경로 자체도 달라질 수 있기 때문이다. 기대하는 문제 사례와 문제가 없는 사례를 함께 분석해 어떤 결과가 바뀌었는지 확인하고, 필요한 수정 이유를 쿼리 옆에 기록해야 이후 버전에서도 판단 근거가 남는다.
로그 파서와 확장 데이터도 업그레이드 대상
CLI 변경도 주변 자동화에 영향을 줄 수 있다. 공식 변경 기록은 표준 오류 메시지에 ERROR와 WARNING 접두사를 넣었지만 구조화된 로그와 SARIF는 유지된다고 설명한다. 텍스트의 모양을 직접 읽는 자동화가 있다면 기존 가정이 맞는지 확인할 지점이다. 오류를 더 분명히 알리는 개선이 이를 소비하는 모든 스크립트의 호환성을 자동 보장하지는 않는다.
또한 YAML 확장 데이터는 부호 있는 32비트 범위를 벗어나는 정수를 거부하도록 검증이 정리됐다. 이전에 조용히 잘린 값을 사용했다면 새 버전에서 실패가 드러날 수 있다. 아카이브에는 엔진 버전과 쿼리 팩뿐 아니라 운영체제·Xcode·빌드 모드, 사용자 쿼리와 확장 데이터의 버전을 함께 남겨야 분석 결과의 변화를 재현할 수 있다.
출처
GitHub Changelog의 원출처와 본문에 표시한 참고자료를 바탕으로 한국어로 재구성했습니다. ‘ARCH.B 분석’은 자료를 읽고 덧붙인 편집 해석입니다.
CodeQL 2.27.2 improves C++, Go, Rust, and JavaScript analysis (새 창)
