에이전틱 SAST 취약점 해결
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed
요약
GitLab Duo는 SAST 취약점을 자동으로 분석하고 컨텍스트를 반영한 코드 수정안이 포함된 머지 리퀘스트를 생성합니다. 에이전트를 사용하지 않는 취약점 해결과 달리, 에이전트 기반 취약점 해결은 반복 추론을 사용하여 다음을 수행합니다.
히스토리
- GitLab 18.9에서
enable_vulnerability_resolution및agentic_sast_vr_ui라는 기능 플래그와 함께 베타 기능으로 도입됨. 기본적으로 활성화됨. - GitLab 18.11에서 일반 공개됨.
- GitLab 19.2에서 기능 플래그
enable_vulnerability_resolution이 제거됨. - GitLab 19.4에서
triage_and_remediation_profile이라는 기능 플래그와 함께 분류 및 조치 프로필 지원이 도입됨. 기본적으로 활성화됨.
GitLab Duo는 SAST 취약점을 자동으로 분석하고 컨텍스트를 반영한 코드 수정안이 포함된 머지 리퀘스트를 생성합니다. 이 에이전트 방식은 다단계 추론을 사용하여 사람의 개입을 최소화한 상태로 취약점을 해결하므로, 조치 시간을 줄이고 보안 결과를 개선합니다.
에이전트를 사용하지 않는 취약점 해결과 달리, 에이전트 기반 취약점 해결은 반복 추론을 사용하여 다음을 수행합니다.
- 코드베이스 전반에서 취약점 컨텍스트를 분석합니다.
- 근본 원인을 해소하는 높은 품질의 수정안을 생성합니다.
- 제안된 해결책에 대한 신뢰도 점수를 제공합니다.
에이전트 기반 SAST 취약점 해결은 자동으로 실행할 수도 있고 직접 실행할 수도 있습니다.
클릭형 데모는 Agentic SAST Vulnerability Resolution을 참고합니다.
보안 구성 프로필도 이 플로를 지원합니다. 여러 프로젝트와 그룹에서 한 번에 플로를 켜고 구성하려면 자동 분류 및 조치 프로필을 사용합니다.
사전 요구 사항#
- GitLab Duo Agent Platform의 필수 요건을 충족합니다.
- Allow foundational flows와 다음 플로를 켭니다.
- Resolve SAST Vulnerability
- SAST False Positive Detection
- 서비스 계정을 허용하도록 푸시 규칙을 구성합니다.
- 기본 GitLab Duo 네임스페이스를 지정합니다.
- 자체 러너를 구성하거나 프로젝트에 GitLab 호스팅 러너를 켭니다.
- 권장 사항. 플로가 프로젝트의 툴체인과 의존성에 액세스할 수 있도록 에이전트 구성 파일을 생성합니다.
자동 해결#
main 브랜치에서 SAST 보안 스캔이 완료되면 Agentic SAST Vulnerability Resolution 플로가 다음 작업을 자동으로 수행합니다.
- High 및 Critical 심각도의 SAST 취약점을 각각 분석합니다.
- 거짓 양성 탐지가 실행되었는지 확인합니다.
- 취약점이 거짓 양성일 가능성이 낮으면 GitLab Duo가 수정안이 포함된 머지 리퀘스트를 만듭니다.
- 파이프라인을 실행하여 수정안이 취약점을 해결하는지 검증합니다.
이 과정은 수동 트리거 없이 백그라운드에서 실행됩니다. 처리가 끝나면 결과가 취약점 리포트에 표시됩니다.
심각도와 관계없이 어떤 SAST 취약점에 대해서든 에이전트 기반 취약점 해결을 언제든 직접 실행할 수 있습니다.
자동 해결 조건#
자동 에이전트 기반 취약점 해결은 다음 조건을 모두 충족할 때 실행됩니다.
- main 브랜치에서 SAST 보안 스캔이 정상적으로 완료되었습니다.
- 스캔이 High 또는 Critical 심각도의 취약점을 탐지했습니다.
- 취약점이 지원되는 SAST 분석기에서 나온 것입니다.
- 거짓 양성 탐지가 실행되어 해당 취약점이 거짓 양성이 아니라고 판단했습니다.
플로 직접 실행#
SAST 취약점에 대해 에이전트 기반 취약점 해결을 직접 실행하려면 다음 단계를 수행합니다.
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
- 해결하려는 취약점을 선택합니다.
- 오른쪽 위 모서리에서 Resolve with Agentic AI를 선택합니다.
플로가 취약점을 분석하고, 수정안을 만들 수 있으면 머지 리퀘스트를 생성합니다. 직접 실행하는 해결은 심각도와 관계없이 모든 SAST 취약점에서 동작합니다.
머지 리퀘스트가 어느 브랜치를 대상으로 하는지는 머지 리퀘스트의 대상 브랜치를 참고합니다.
여러 취약점 해결#
히스토리
- GitLab 19.3에서
bulk_vulnerabilities_duo_workflow_api라는 기능 플래그와 함께 베타 기능으로 도입됨. 기본적으로 비활성화됨. - GitLab 19.4에서 GitLab.com 및 GitLab Self-Managed에 대해 기본적으로 활성화됨.
이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.
여러 취약점에 대해 플로를 실행하여 각 취약점을 해결하는 머지 리퀘스트를 만들 수 있습니다.
취약점은 Critical, High, Medium, Low, Unknown, Info 순으로 처리됩니다.
여러 취약점을 한 번에 해결하는 데모는 Bulk Vulnerability Resolution을 참고합니다.
사전 요구 사항:
- 여러 취약점에 대한 플로를 시작하거나 취소하려면 다음 중 하나가 필요합니다.
- 프로젝트에 대한 Security Manager, Maintainer 또는 Owner 권한
admin_vulnerability권한이 있는 사용자 정의 역할
- 플로 진행 상황을 보려면 Developer 권한이 있어야 합니다.
- 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- Secure > Vulnerability report를 선택합니다.
- 해결하려는 각 취약점 옆의 체크박스를 선택합니다. 페이지의 모든 취약점을 선택하려면 표 헤더의 체크박스를 선택합니다.
- Select action 드롭다운 목록에서 Create an MR with Vulnerability Resolution을 선택합니다.
- Resolve with AI를 선택합니다.
- 진행 중인 플로를 취소하려면 다음 단계를 수행합니다.
- Cancel resolution을 선택합니다.
- 확인 대화 상자에서 Cancel resolution을 선택합니다.
헤더 체크박스는 현재 페이지의 취약점만 선택합니다. 더 많은 취약점에 대해 플로를 실행하려면 각 페이지에서 같은 단계를 반복합니다.
플로가 실행되는 동안 취약점 목록 위의 진행 표시기가 선택한 취약점 중 몇 건이 처리되었는지 보여 줍니다.
알려진 제한 사항#
- 진행 리포트는 해결 대상이 되는 취약점 수만 표시합니다. 취약점 10건을 선택했고 그중 3건이 대상이면 진행 리포트에는 3건만 표시됩니다.
- 취약점 해결 실행에 거짓 양성 분석을 거치지 않은 취약점이 포함되어 있으면 진행 표시기가 100% 에 도달하기 전에 멈출 수 있습니다. 실행을 취소한 다음 분석을 마친 취약점으로 새로 실행합니다.
- 프로젝트에서는 각 플로를 한 번에 하나만 실행할 수 있습니다. 실행은 프로젝트에 속하므로 다른 사용자가 시작한 실행도 새 실행을 막습니다. 같은 플로를 다시 실행하기 전에 진행 중인 실행이 끝날 때까지 기다립니다.
- 일괄 플로 실행은 최대 1,000건의 취약점까지만 가능합니다. 이 제한은 취약점 리포트에서 선택한 취약점에 적용됩니다. 1,000건이 넘는 취약점을 해결하려면 GraphQL을 사용합니다.
생성된 머지 리퀘스트#
GitLab Duo가 취약점에 대한 머지 리퀘스트를 생성하면 다음 과정이 진행됩니다.
- 수정안이 포함된 머지 리퀘스트가 만들어집니다.
- 설명에는 다음 내용이 포함됩니다.
- 취약점 세부 정보와 심각도
- 수정 접근 방식에 대한 설명
- 관련 보안 자료 링크
- 제안된 해결책의 신뢰도 점수
- 파이프라인이 자동으로 실행되어 수정안을 검증합니다.
- 리뷰어가 변경 사항과 파이프라인 결과를 검토합니다.
- 머지 권한이 있는 사용자가 팀의 워크플로에 따라 머지합니다.
머지 리퀘스트의 대상 브랜치#
히스토리
- GitLab 19.5에서 도입되었습니다.
머지 리퀘스트는 취약점이 감지된 브랜치를 대상으로 합니다. 취약점이 브랜치와 연결되어 있지 않으면 머지 리퀘스트는 프로젝트의 기본 브랜치를 대상으로 합니다. 태그에서 감지된 취약점의 경우 머지 리퀘스트가 태그를 대상으로 할 수 없으므로 머지 리퀘스트는 기본 브랜치를 대상으로 합니다.
이 동작은 다음에서 플로를 실행할 때 적용됩니다.
- 취약점 세부 정보 페이지.
- 취약점 보고서의 VR available 배지.
- 여러 취약점에 대한 취약점 보고서.
문제 해결#
에이전트 기반 취약점 해결이 수정안을 생성하지 못하는 경우가 있습니다. 주요 원인은 다음과 같습니다.
- 컨텍스트 부족: 추가 컨텍스트나 수동 개입이 필요한 복잡한 코드 패턴에서 취약점이 발생한 경우입니다.
- 거짓 양성 탐지: AI 모델이 취약점의 유효성을 평가합니다. 모델이 해당 취약점을
실제 취약점이 아니거나 수정할 가치가 없다고 판단할 수 있습니다.
- 해당 취약점이 거짓 양성이거나 수정할 가치가 없다는 판단에 동의한다면 취약점을 기각하고 해당하는 사유를 선택합니다.
- 일시적이거나 예기치 않은 오류:
an unexpected error has occurred,the upstream AI provider request timed out,something went wrong또는 유사한 내용의 오류 메시지가 표시될 수 있습니다.- 이러한 오류는 AI 공급자나 GitLab Duo의 일시적인 문제로 발생할 수 있습니다.
- 다시 요청하면 성공할 수 있으므로 취약점 해결을 다시 시도해 볼 수 있습니다.
- 이러한 오류가 계속 나타나면 GitLab에 지원을 요청합니다.
피드백 제공#
에이전트 기반 취약점 해결에 대한 의견을 기다립니다. 문제가 발생하거나 개선 제안이 있다면 이슈 585626에 의견을 남깁니다.