InfoGrab DocsInfoGrab Docs

취약점 세부 정보

요약

프로젝트의 각 취약점에는 취약점 페이지가 있습니다. 각 섹션은 접을 수 있습니다. Common Vulnerabilities and Exposures (CVE) 카탈로그에 있는 취약점의 경우 Risk 섹션에는 다음도 포함됩니다:

히스토리

프로젝트의 각 취약점에는 취약점 페이지가 있습니다. 페이지 헤더에는 취약점 제목, 감지된 시점과 파이프라인, 관련 머지 리퀘스트 및 이슈의 개수(있는 경우), 사용할 수 있는 조치가 표시됩니다. 오른쪽 사이드바에는 취약점의 상태와 심각도가 표시됩니다. 나머지 취약점 데이터는 다음 섹션으로 그룹화됩니다:

  • Risk: 취약점의 우선순위를 정하는 데 도움이 되는 점수와 플래그입니다.
  • Remediation: 스캐너가 보고한 해결책이며, 제공되는 경우에 표시됩니다.
  • Details: 취약점 설명, 취약점을 보고한 스캐너, 그리고 코드, 컨테이너 이미지 또는 의존성에서의 위치입니다.
  • Supplementary information: CVE 및 CWE 같은 식별자, 외부 참조에 대한 링크, 그리고 보안 교육입니다.
  • Evidence: 스캐너가 기록한 요청과 응답이며, 이를 보고하는 스캐너에만 해당합니다.
  • Related MRs 및 Related issues: 취약점에 연결된 머지 리퀘스트와 이슈입니다.
  • Activity: 상태 변경, 코멘트, 감지 이벤트의 로그입니다.

각 섹션은 접을 수 있습니다. 섹션의 내용을 숨기거나 표시하려면 섹션 헤더에서 Collapse ([chevron-lg-up]) 또는 Expand ([chevron-lg-down])를 선택합니다.

Common Vulnerabilities and Exposures (CVE) 카탈로그에 있는 취약점의 경우 Risk 섹션에는 다음도 포함됩니다:

이 추가 데이터에 대한 자세한 내용은 취약점 위험 평가 데이터를 참고합니다.

악성코드로 식별된 취약점의 경우 CVSS, EPSS, KEV 점수가 표시되지 않으며 Remediation 섹션은 숨겨집니다. GitLab은 CVE에 대해 하는 것처럼 악성코드에 대한 해결책을 권장할 수 없습니다. 해당 패키지의 영향받는 버전은 취약한 것이 아니라 악성이므로, 수정된 버전이 존재하지 않습니다. 악성코드 탐지 결과는 GitLab 악성코드 어드바이저리를 기반으로 합니다.

스캐너가 취약점을 거짓 양성으로 판단한 경우 Risk 섹션 위에 경고가 표시됩니다. GitLab Duo가 취약점을 거짓 양성 가능성이 있는 것으로 식별한 경우에는 Risk 섹션에 False positive confidence 점수가 대신 표시됩니다. 자세한 내용은 거짓 양성 감지를 참고합니다.

SAST가 감지한 취약점의 경우 GitLab Duo가 자동으로 분석하여 컨텍스트를 인식한 코드 수정이 포함된 머지 리퀘스트를 생성할 수 있습니다. 자세한 내용은 에이전틱 SAST 취약점 해결을 참고합니다.

시크릿 거짓 양성 탐지#

히스토리

GitLab Duo는 시크릿 탐지 결과를 자동으로 분석하여 잠재적 거짓 양성을 식별합니다. 거짓 양성을 무시하면 실제 보안 위험이 아닐 가능성이 높은 결과가 표시되므로 취약점 보고서의 노이즈가 줄어듭니다.

분석된 각 취약점에 대해 GitLab Duo는 다음 정보를 제공합니다:

  • 평가가 올바를 가능성을 나타내는 신뢰도 점수입니다.
  • 해당 결과가 맞을 수도 있고 맞지 않을 수도 있는 이유에 대한 설명입니다.
  • 취약점 보고서에서 해당 취약점이 잠재적 거짓 양성으로 식별되었음을 나타내는 시각적 표시입니다.

자세한 내용은 시크릿 거짓 양성 탐지를 참고합니다.

취약점 해결#

Model information
히스토리
  • GitLab 16.7에서 GitLab.com의 실험으로 도입됨.
  • GitLab 17.3에서 베타로 변경됨.
  • GitLab 17.6 이상에서 GitLab Duo 애드온을 요구하도록 변경됨.

GitLab Duo 취약점 해결을 사용하면 취약점을 해결하는 머지 리퀘스트를 자동으로 생성할 수 있습니다. 기본적으로 Anthropic Claude Sonnet 4.6 모델로 구동됩니다.

GitLab은 대규모 언어 모델이 올바른 결과를 내놓는다고 보장할 수 없습니다. 병합하기 전에 항상 제안된 변경 사항을 검토해야 합니다. 검토할 때는 다음을 확인합니다:

  • 애플리케이션의 기존 기능이 유지되는지 확인합니다.
  • 취약점이 조직의 표준에 따라 해결되는지 확인합니다.

개요 보기

사전 요구 사항:

  • GitLab Ultimate 구독 티어와 GitLab Duo Enterprise가 있어야 합니다.
  • 프로젝트의 멤버여야 합니다.
  • 취약점은 지원되는 분석기가 보고한 SAST 결과여야 합니다:
    • GitLab이 지원하는 분석기 중 하나입니다.
    • 각 취약점에 대해 취약점 위치와 CWE 식별자를 보고하도록 올바르게 통합된 서드파티 SAST 스캐너입니다.
  • 취약점은 지원되는 유형이어야 합니다.

모든 GitLab Duo 기능을 활성화하는 방법을 참고합니다.

취약점을 해결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 선택 사항. 기본 필터를 제거하려면 Clear ([clear])를 선택합니다.
  4. 취약점 목록 위에서 필터 바를 선택합니다.
  5. 나타나는 드롭다운 목록에서 Activity를 선택한 다음 GitLab Duo (AI) 범주에서 Vulnerability Resolution available을 선택합니다.
  6. 필터 필드 밖을 선택합니다. 취약점 심각도 합계와 일치하는 취약점 목록이 업데이트됩니다.
  7. 해결하려는 SAST 취약점을 선택합니다.
    • 취약점 해결을 지원하는 취약점 옆에는 파란색 아이콘이 표시됩니다.
  8. 오른쪽 위에서 Resolve with AI를 선택합니다. 해당 버튼이 표시되지 않으면 AI actions를 선택한 다음 Resolve with AI를 선택합니다. 이 프로젝트가 공개 프로젝트라면 MR을 생성할 때 취약점과 제시된 해결책이 공개적으로 노출된다는 점에 유의합니다. MR을 비공개로 생성하려면 비공개 포크를 생성한 다음 이 과정을 반복합니다.
  9. MR에 커밋을 하나 더 추가합니다. 이렇게 하면 새 파이프라인이 실행됩니다.
  10. 파이프라인이 완료된 후 파이프라인 보안 탭에서 취약점이 더 이상 나타나지 않는지 확인합니다.
  11. 취약점 보고서에서 취약점을 수동으로 업데이트합니다.

AI 해결 제안이 포함된 머지 리퀘스트가 열립니다. 제안된 변경 사항을 검토한 다음 표준 워크플로에 따라 머지 리퀘스트를 처리합니다.

이슈 476553에서 이 기능에 대한 피드백을 남길 수 있습니다.

취약점 해결이 지원하는 취약점#

제안된 해결책의 품질을 보장하기 위해 취약점 해결은 특정 취약점 집합에만 제공됩니다. 시스템은 취약점의 Common Weakness Enumeration(CWE) 식별자를 기준으로 취약점 해결을 제공할지 결정합니다.

현재 취약점 집합은 자동화 시스템과 보안 전문가의 테스트를 기반으로 선택되었습니다. GitLab은 더 많은 유형의 취약점으로 커버리지를 확장하는 작업을 적극적으로 진행하고 있습니다.

취약점 해결이 지원하는 CWE 전체 목록 보기
  • CWE-23: Relative Path Traversal
  • CWE-73: External Control of File Name or Path
  • CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
  • CWE-80: Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)
  • CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
  • CWE-116: Improper Encoding or Escaping of Output
  • CWE-118: Incorrect Access of Indexable Resource ('Range Error')
  • CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer
  • CWE-120: Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')
  • CWE-126: Buffer Over-read
  • CWE-190: Integer Overflow or Wraparound
  • CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
  • CWE-208: Observable Timing Discrepancy
  • CWE-209: Generation of Error Message Containing Sensitive Information
  • CWE-272: Least Privilege Violation
  • CWE-287: Improper Authentication
  • CWE-295: Improper Certificate Validation
  • CWE-297: Improper Validation of Certificate with Host Mismatch
  • CWE-305: Authentication Bypass by Primary Weakness
  • CWE-310: Cryptographic Issues
  • CWE-311: Missing Encryption of Sensitive Data
  • CWE-323: Reusing a Nonce, Key Pair in Encryption
  • CWE-327: Use of a Broken or Risky Cryptographic Algorithm
  • CWE-328: Use of Weak Hash
  • CWE-330: Use of Insufficiently Random Values
  • CWE-338: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
  • CWE-345: Insufficient Verification of Data Authenticity
  • CWE-346: Origin Validation Error
  • CWE-352: Cross-Site Request Forgery
  • CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
  • CWE-369: Divide By Zero
  • CWE-377: Insecure Temporary File
  • CWE-378: Creation of Temporary File With Insecure Permissions
  • CWE-400: Uncontrolled Resource Consumption
  • CWE-489: Active Debug Code
  • CWE-521: Weak Password Requirements
  • CWE-539: Use of Persistent Cookies Containing Sensitive Information
  • CWE-599: Missing Validation of OpenSSL Certificate
  • CWE-611: Improper Restriction of XML External Entity Reference
  • CWE-676: Use of potentially dangerous function
  • CWE-704: Incorrect Type Conversion or Cast
  • CWE-754: Improper Check for Unusual or Exceptional Conditions
  • CWE-770: Allocation of Resources Without Limits or Throttling
  • CWE-1004: Sensitive Cookie Without 'HttpOnly' Flag
  • CWE-1275: Sensitive Cookie with Improper SameSite Attribute

문제 해결#

취약점 해결이 제안 수정을 생성하지 못하는 경우가 있습니다. 일반적인 원인은 다음과 같습니다:

  • 거짓 양성 감지:
    • 수정을 제안하기 전에 AI 모델이 취약점이 유효한지 평가합니다. 해당 취약점이 진짜 취약점이 아니거나 수정할 가치가 없다고 판단할 수 있습니다.
    • 취약점이 테스트 코드에서 발생하는 경우 이런 일이 생길 수 있습니다. 조직에서는 테스트 코드에서 발생한 취약점도 수정하도록 선택할 수 있지만, 모델은 이를 거짓 양성으로 평가하는 경우가 있습니다.
    • 취약점이 거짓 양성이거나 수정할 가치가 없다는 데 동의한다면 취약점을 무시하고 일치하는 이유를 선택해야 합니다.
      • SAST 구성을 사용자 정의하거나 GitLab SAST 규칙의 문제를 보고하려면 SAST 규칙을 참고합니다.
  • 일시적 오류 또는 예기치 않은 오류:
    • 오류 메시지에 an unexpected error has occurred, the upstream AI provider request timed out, something went wrong 또는 이와 비슷한 원인이 표시될 수 있습니다.
    • 이러한 오류는 AI 공급자 또는 GitLab Duo의 일시적인 문제로 발생할 수 있습니다.
    • 새 요청은 성공할 수 있으므로 취약점 해결을 다시 시도할 수 있습니다.
    • 이러한 오류가 계속 나타나면 GitLab에 지원을 요청합니다.

취약점 해결에서 서드파티 AI API와 공유되는 데이터#

다음 데이터가 서드파티 AI API와 공유됩니다:

  • 취약점 이름
  • 취약점 설명
  • 식별자(CWE, OWASP)
  • 취약한 코드 줄이 포함된 전체 파일
  • 취약한 코드 줄(줄 번호)

머지 리퀘스트에서의 취약점 해결#

히스토리

GitLab Duo 취약점 해결을 사용하면 취약점 결과를 해결하는 머지 리퀘스트 제안 코멘트를 자동으로 생성할 수 있습니다. 기본적으로 Anthropic Claude Sonnet 4.6 모델로 구동됩니다.

취약점 결과를 해결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Code > Merge requests를 선택합니다.
  3. 머지 리퀘스트를 선택합니다.
    • 취약점 해결이 지원하는 취약점 결과는 다누키 AI 아이콘([tanuki-ai])으로 표시됩니다.
  4. 지원되는 결과를 선택하여 보안 결과 대화 상자를 엽니다.
  5. 오른쪽 아래에서 Resolve with AI를 선택합니다.

AI 해결 제안이 포함된 코멘트가 머지 리퀘스트에 열립니다. 제안된 변경 사항을 검토한 다음 표준 워크플로에 따라 머지 리퀘스트 제안을 적용합니다.

이슈 476553에서 이 기능에 대한 피드백을 남길 수 있습니다.

문제 해결#

머지 리퀘스트에서의 취약점 해결이 제안 수정을 생성하지 못하는 경우가 있습니다. 일반적인 원인은 다음과 같습니다:

  • 거짓 양성 감지:
    • 수정을 제안하기 전에 AI 모델이 취약점이 유효한지 평가합니다. 해당 취약점이 진짜 취약점이 아니거나 수정할 가치가 없다고 판단할 수 있습니다.
    • 취약점이 테스트 코드에서 발생하는 경우 이런 일이 생길 수 있습니다. 조직에서는 테스트 코드에서 발생한 취약점도 수정하도록 선택할 수 있지만, 모델은 이를 거짓 양성으로 평가하는 경우가 있습니다.
    • 취약점이 거짓 양성이거나 수정할 가치가 없다는 데 동의한다면 취약점을 무시하고 일치하는 이유를 선택해야 합니다.
      • SAST 구성을 사용자 정의하거나 GitLab SAST 규칙의 문제를 보고하려면 SAST 규칙을 참고합니다.
  • 일시적 오류 또는 예기치 않은 오류:
    • 오류 메시지에 an unexpected error has occurred, the upstream AI provider request timed out, something went wrong 또는 이와 비슷한 원인이 표시될 수 있습니다.
    • 이러한 오류는 AI 공급자 또는 GitLab Duo의 일시적인 문제로 발생할 수 있습니다.
    • 새 요청은 성공할 수 있으므로 취약점 해결을 다시 시도할 수 있습니다.
    • 이러한 오류가 계속 나타나면 GitLab에 지원을 요청합니다.
  • Resolution target could not be found in the merge request, unable to create suggestion 오류:
    • 이 오류는 대상 브랜치에서 전체 보안 스캔 파이프라인이 실행되지 않은 경우에 발생할 수 있습니다. 머지 리퀘스트 문서를 참고합니다.

취약점 코드 흐름#

특정 유형의 취약점에 대해 GitLab Advanced SAST는 코드 흐름 정보를 제공합니다. 취약점의 코드 흐름은 모든 할당, 조작, 정화를 거쳐 사용자 입력(소스)에서 취약한 코드 줄(싱크)까지 데이터가 이동하는 경로입니다.

취약점의 코드 흐름을 확인하는 방법에 대한 자세한 내용은 취약점 코드 흐름을 참고합니다.

사용자 이름 인수에서 그것을 실행하는 데이터베이스 쿼리까지 이어지는 SQL 인젝션의 단계를 보여 주는 취약점의 Data flow 섹션

취약점 상태 값#

취약점의 상태는 다음 중 하나입니다:

  • Needs triage: 새로 발견된 취약점의 기본 상태입니다.
  • Confirmed: 사용자가 이 취약점을 보고 정확하다고 확인한 상태입니다.
  • Dismissed: 사용자가 이 취약점을 평가하고 무시한 상태입니다. 무시된 취약점은 이후 스캔에서 감지되어도 무시됩니다.
  • Resolved: 취약점이 수정되었거나 더 이상 존재하지 않습니다. 해결된 취약점이 다시 유입되어 재감지되면 해당 레코드가 복원되고 상태가 Needs triage로 설정됩니다.

취약점은 일반적으로 다음 수명 주기를 거칩니다:

Mermaid 다이어그램 (15줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
stateDiagram
    accTitle: Vulnerability lifecycle
    accDescr: Typical lifecycle of a vulnerability
direction LR
Needs_triage: Needs triage

[*] --> Needs_triage
Needs_triage --> Confirmed
Needs_triage --> Dismissed
Dismissed --> [*]
Confirmed --> Resolved
Resolved --> Needs_triage: If reintroduced and detected again
Resolved --&gt; [*]</code></pre></details></div>

취약점이 더 이상 감지되지 않는 경우#

히스토리

취약점을 해결하려고 의도적으로 변경한 결과로, 또는 다른 변경의 부수 효과로 취약점이 더 이상 감지되지 않을 수 있습니다. 취약점을 보고한 분석기가 해당 언어를 더 이상 스캔하지 않아서 취약점이 더 이상 감지되지 않을 수도 있습니다. 예시는 취약점 변경을 참고합니다. 보안 스캔이 실행되었을 때 기본 브랜치에서 취약점이 더 이상 감지되지 않으면 스캐너는 해당 레코드의 활동 로그에 No longer detected를 추가하지만, 레코드의 상태는 바뀌지 않습니다. 대신 취약점이 해결되었는지 확인한 다음, 해결되었다면 상태를 수동으로 Resolved로 변경합니다. 취약점 관리 정책을 사용하면 특정 기준에 맞는 취약점의 상태를 자동으로 Resolved로 변경할 수도 있습니다.

취약점을 해결한 커밋에 대한 링크는 취약점 페이지의 Activity 섹션에서 확인할 수 있습니다.

취약점 무시 이유#

취약점을 무시할 때는 다음 이유 중 하나를 선택해야 합니다:

  • Acceptable risk: 취약점이 알려져 있고 해결이나 완화가 되지 않았지만, 허용 가능한 비즈니스 위험으로 간주됩니다.
  • False positive: 시스템에 취약점이 없는데도 취약점이 있다고 잘못 표시하는 보고 오류입니다.
  • Mitigating control: 조직이 채택한 관리적, 운영적 또는 기술적 통제(즉, 보호 장치나 대책)가 정보 시스템에 동등하거나 비슷한 수준의 보호를 제공하여 취약점의 위험을 완화합니다.
  • Used in tests: 해당 결과는 테스트의 일부이거나 테스트 데이터이므로 취약점이 아닙니다.
  • Not applicable: 취약점이 알려져 있고 해결이나 완화가 되지 않았지만, 업데이트되지 않을 애플리케이션 부분에 있는 것으로 간주됩니다.

취약점 상태 변경#

히스토리
  • Developer 역할을 가진 사용자가 취약점 상태를 변경할 수 있게 하던 권한(admin_vulnerability)이 GitLab 16.4에서 더 이상 사용되지 않음으로 표시되고 GitLab 17.0에서 제거됨.
  • Comment 텍스트 상자가 GitLab 17.9에서 추가됨.

사전 요구 사항:

  • 프로젝트에 대한 Security Manager, Maintainer 또는 Owner 역할이나, admin_vulnerability 권한이 있는 사용자 정의 역할이 있어야 합니다.

취약점 페이지에서 취약점 상태를 변경하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. 오른쪽 사이드바의 Status 섹션에서 Edit를 선택합니다.
  5. Status 드롭다운 목록에서 상태를 선택하거나, 취약점 상태를 Dismissed로 변경하려면 무시 이유를 선택합니다.
  6. Comment 텍스트 상자에 무시 이유에 대한 자세한 내용을 담은 코멘트를 입력합니다. Dismissed 상태를 적용할 때는 코멘트가 필요합니다.
  7. Change status를 선택합니다.

변경한 사람과 변경 시점을 포함한 상태 변경 세부 정보가 취약점 페이지의 Activity 섹션에 기록됩니다.

취약점에 대한 GitLab 이슈 생성#

취약점을 해결하거나 완화하기 위해 취한 조치를 추적하는 GitLab 이슈를 생성할 수 있습니다. 취약점에 대한 GitLab 이슈를 생성하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. Create issue를 선택합니다.

취약점 보고서의 정보를 담은 이슈가 GitLab 프로젝트에 생성됩니다.

Jira 이슈를 생성하려면 취약점에 대한 Jira 이슈 생성을 참고합니다.

취약점을 GitLab 및 Jira 이슈에 연결#

취약점을 하나 이상의 기존 GitLab 이슈 또는 Jira 이슈에 연결할 수 있습니다. 연결 기능은 한 번에 하나만 사용할 수 있습니다. 링크를 추가하면 취약점을 해결하거나 완화하는 이슈를 추적하는 데 도움이 됩니다.

취약점을 기존 GitLab 이슈에 연결#

사전 요구 사항:

취약점을 기존 GitLab 이슈에 연결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. Related issues 섹션에서 Add existing issue를 선택합니다.
  5. 연결할 각 이슈에 대해 다음 중 하나를 수행합니다:
    • 이슈 링크를 붙여넣습니다.
    • 이슈의 ID를 입력합니다(앞에 해시 #를 붙입니다).
  6. Add를 선택합니다.

선택한 GitLab 이슈가 Related issues 섹션에 추가되고 연결된 이슈 카운터가 업데이트됩니다.

취약점에 연결된 GitLab 이슈는 취약점 보고서와 취약점 페이지에 표시됩니다.

취약점과 연결된 GitLab 이슈 사이의 다음 조건에 유의합니다:

  • 취약점 페이지에는 관련 이슈가 표시되지만, 이슈 페이지에는 그 이슈가 관련된 취약점이 표시되지 않습니다.
  • 이슈는 한 번에 하나의 취약점에만 연결할 수 있습니다.
  • 이슈는 그룹과 프로젝트를 넘어 연결할 수 있습니다.

취약점을 기존 Jira 이슈에 연결#

사전 요구 사항:

  • Jira 이슈 통합이 구성되어 있고 Create Jira issues for vulnerabilities 체크박스가 선택되어 있어야 합니다.

취약점을 기존 Jira 이슈에 연결하려면 Jira 이슈 설명에 다음 줄을 추가합니다:

/-/security/vulnerabilities/<id>

<id>는 임의의 취약점 ID입니다. 서로 다른 ID를 담은 여러 줄을 하나의 설명에 추가할 수 있습니다.

적절한 설명이 포함된 Jira 이슈가 Related Jira issues 섹션에 추가되고 연결된 이슈 카운터가 업데이트됩니다.

취약점에 연결된 Jira 이슈는 취약점 페이지에만 표시됩니다.

취약점과 연결된 Jira 이슈 사이의 다음 조건에 유의합니다:

  • 취약점 페이지와 이슈 페이지 모두 서로 관련된 취약점을 표시합니다.
  • 이슈는 한 번에 하나 이상의 취약점에 연결될 수 있습니다.

취약점 해결 절차#

일부 취약점은 해결책이 이미 알려져 있지만 수동으로 구현해야 합니다. 취약점 페이지의 Remediation 섹션에는 보안 결과를 보고한 보안 스캔 도구가 제공한 해결책이나 취약점을 수동으로 생성할 때 입력한 해결책이 표시됩니다. GitLab 도구는 GitLab 어드바이저리 데이터베이스의 정보를 활용합니다.

또한 일부 도구는 제안된 해결책을 적용하는 소프트웨어 패치를 포함할 수 있습니다. 이 경우 취약점 페이지의 Other actions 드롭다운 목록에 Resolve with scanner suggestion 작업이 포함됩니다.

이 기능이 지원하는 스캐너는 다음과 같습니다:

취약점을 해결하려면 다음 중 하나를 수행합니다:

머지 리퀘스트로 취약점 해결#

머지 리퀘스트로 취약점을 해결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. 오른쪽 위에서 Other actions를 선택한 다음 Resolve with scanner suggestion을 선택합니다.

취약점을 해결하는 데 필요한 패치를 적용하는 머지 리퀘스트가 생성됩니다. 표준 워크플로에 따라 머지 리퀘스트를 처리합니다.

취약점 수동 해결#

GitLab이 취약점에 대해 생성한 패치를 수동으로 적용하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. 오른쪽 위에서 Other actions를 선택한 다음 Download Patch를 선택합니다.
  5. 로컬 프로젝트에 패치를 생성할 때 사용한 것과 같은 커밋이 체크아웃되어 있는지 확인합니다.
  6. git apply remediation.patch를 실행합니다.
  7. 변경 사항을 확인하고 브랜치에 커밋합니다.
  8. 변경 사항을 main 브랜치에 적용하는 머지 리퀘스트를 생성합니다.
  9. 표준 워크플로에 따라 머지 리퀘스트를 처리합니다.

취약점에 대한 보안 교육 활성화#

Note

보안 교육은 보안 조치로 공용 인터넷과 분리된 컴퓨터, 즉 오프라인 환경에서는 이용할 수 없습니다. 구체적으로는 활성화하려는 교육 제공업체의 API 엔드포인트를 GitLab 서버가 조회할 수 있어야 합니다. 일부 서드파티 교육 공급업체는 무료 계정 등록을 요구할 수 있습니다. Secure Code Warrior, Kontra, SecureFlag 중 하나로 이동해 계정을 등록합니다. GitLab은 이러한 서드파티 공급업체에 사용자 정보를 전송하지 않습니다. GitLab이 전송하는 것은 CWE 또는 OWASP 식별자와 파일 확장자의 언어 이름입니다.

보안 교육은 개발자가 취약점을 수정하는 방법을 익히는 데 도움이 됩니다. 개발자는 감지된 취약점과 관련된 보안 교육을 선택된 교육 제공업체로부터 확인할 수 있습니다.

프로젝트에서 취약점에 대한 보안 교육을 활성화하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
  3. 탭 바에서 Vulnerability Management를 선택합니다.
  4. 보안 교육 제공업체를 활성화하려면 토글을 켭니다.

각 통합은 CWE 또는 OWASP 같은 취약점 식별자와 언어를 보안 교육 공급업체에 제출합니다. 그 결과로 만들어진 공급업체 교육 링크가 GitLab 취약점에 표시됩니다.

취약점에 대한 보안 교육 보기#

보안 교육이 활성화되어 있으면 취약점 페이지에 감지된 취약점과 관련된 교육 링크가 표시될 수 있습니다. 교육 제공 여부는 활성화된 교육 공급업체가 해당 취약점에 맞는 콘텐츠를 보유하고 있는지에 따라 달라집니다. 교육 콘텐츠는 취약점 식별자를 기준으로 요청됩니다. 취약점에 부여되는 식별자는 취약점마다 다르고, 제공되는 교육 콘텐츠도 공급업체마다 다릅니다. 일부 취약점은 교육 콘텐츠를 표시하지 않습니다. CWE가 있는 취약점은 교육 결과를 반환할 가능성이 가장 높습니다.

취약점에 대한 보안 교육을 보려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 보안 교육을 보려는 취약점을 선택합니다.
  4. Supplementary information 섹션의 Training 아래에서 View training을 선택합니다.

전이적 의존성에서 취약점 위치 보기#

히스토리
Feature flag

이 기능의 사용 가능 여부는 피처 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

의존성에서 발견된 취약점을 관리할 때 취약점 페이지의 Details 섹션에는 다음이 표시됩니다:

  • 취약점이 발견된 직접 의존성의 위치입니다.
  • 가능한 경우 취약점이 발생하는 구체적인 줄 번호입니다.

취약점이 하나 이상의 전이적 의존성에서 발생하는 경우에는 직접 의존성만 알아서는 충분하지 않을 수 있습니다. 전이적 의존성은 직접 의존하는 항목을 상위에 두고 있는 간접 의존성입니다.

전이적 의존성이 있으면 취약점을 포함한 전이적 의존성을 비롯해 모든 의존성에 이르는 경로를 볼 수 있습니다.

  • 취약점 페이지의 Details 섹션에서 View dependency paths를 선택합니다. View dependency paths가 표시되지 않으면 전이적 의존성이 없습니다.

취약점 세부 정보

GitLab v19.5
Tier: Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

프로젝트의 각 취약점에는 취약점 페이지가 있습니다. 각 섹션은 접을 수 있습니다. Common Vulnerabilities and Exposures (CVE) 카탈로그에 있는 취약점의 경우 Risk 섹션에는 다음도 포함됩니다:

히스토리

프로젝트의 각 취약점에는 취약점 페이지가 있습니다. 페이지 헤더에는 취약점 제목, 감지된 시점과 파이프라인, 관련 머지 리퀘스트 및 이슈의 개수(있는 경우), 사용할 수 있는 조치가 표시됩니다. 오른쪽 사이드바에는 취약점의 상태와 심각도가 표시됩니다. 나머지 취약점 데이터는 다음 섹션으로 그룹화됩니다:

  • Risk: 취약점의 우선순위를 정하는 데 도움이 되는 점수와 플래그입니다.
  • Remediation: 스캐너가 보고한 해결책이며, 제공되는 경우에 표시됩니다.
  • Details: 취약점 설명, 취약점을 보고한 스캐너, 그리고 코드, 컨테이너 이미지 또는 의존성에서의 위치입니다.
  • Supplementary information: CVE 및 CWE 같은 식별자, 외부 참조에 대한 링크, 그리고 보안 교육입니다.
  • Evidence: 스캐너가 기록한 요청과 응답이며, 이를 보고하는 스캐너에만 해당합니다.
  • Related MRs 및 Related issues: 취약점에 연결된 머지 리퀘스트와 이슈입니다.
  • Activity: 상태 변경, 코멘트, 감지 이벤트의 로그입니다.

각 섹션은 접을 수 있습니다. 섹션의 내용을 숨기거나 표시하려면 섹션 헤더에서 Collapse ([chevron-lg-up]) 또는 Expand ([chevron-lg-down])를 선택합니다.

Common Vulnerabilities and Exposures (CVE) 카탈로그에 있는 취약점의 경우 Risk 섹션에는 다음도 포함됩니다:

이 추가 데이터에 대한 자세한 내용은 취약점 위험 평가 데이터를 참고합니다.

악성코드로 식별된 취약점의 경우 CVSS, EPSS, KEV 점수가 표시되지 않으며 Remediation 섹션은 숨겨집니다. GitLab은 CVE에 대해 하는 것처럼 악성코드에 대한 해결책을 권장할 수 없습니다. 해당 패키지의 영향받는 버전은 취약한 것이 아니라 악성이므로, 수정된 버전이 존재하지 않습니다. 악성코드 탐지 결과는 GitLab 악성코드 어드바이저리를 기반으로 합니다.

스캐너가 취약점을 거짓 양성으로 판단한 경우 Risk 섹션 위에 경고가 표시됩니다. GitLab Duo가 취약점을 거짓 양성 가능성이 있는 것으로 식별한 경우에는 Risk 섹션에 False positive confidence 점수가 대신 표시됩니다. 자세한 내용은 거짓 양성 감지를 참고합니다.

SAST가 감지한 취약점의 경우 GitLab Duo가 자동으로 분석하여 컨텍스트를 인식한 코드 수정이 포함된 머지 리퀘스트를 생성할 수 있습니다. 자세한 내용은 에이전틱 SAST 취약점 해결을 참고합니다.

시크릿 거짓 양성 탐지#

히스토리

GitLab Duo는 시크릿 탐지 결과를 자동으로 분석하여 잠재적 거짓 양성을 식별합니다. 거짓 양성을 무시하면 실제 보안 위험이 아닐 가능성이 높은 결과가 표시되므로 취약점 보고서의 노이즈가 줄어듭니다.

분석된 각 취약점에 대해 GitLab Duo는 다음 정보를 제공합니다:

  • 평가가 올바를 가능성을 나타내는 신뢰도 점수입니다.
  • 해당 결과가 맞을 수도 있고 맞지 않을 수도 있는 이유에 대한 설명입니다.
  • 취약점 보고서에서 해당 취약점이 잠재적 거짓 양성으로 식별되었음을 나타내는 시각적 표시입니다.

자세한 내용은 시크릿 거짓 양성 탐지를 참고합니다.

취약점 해결#

Model information
히스토리
  • GitLab 16.7에서 GitLab.com의 실험으로 도입됨.
  • GitLab 17.3에서 베타로 변경됨.
  • GitLab 17.6 이상에서 GitLab Duo 애드온을 요구하도록 변경됨.

GitLab Duo 취약점 해결을 사용하면 취약점을 해결하는 머지 리퀘스트를 자동으로 생성할 수 있습니다. 기본적으로 Anthropic Claude Sonnet 4.6 모델로 구동됩니다.

GitLab은 대규모 언어 모델이 올바른 결과를 내놓는다고 보장할 수 없습니다. 병합하기 전에 항상 제안된 변경 사항을 검토해야 합니다. 검토할 때는 다음을 확인합니다:

  • 애플리케이션의 기존 기능이 유지되는지 확인합니다.
  • 취약점이 조직의 표준에 따라 해결되는지 확인합니다.

개요 보기

사전 요구 사항:

  • GitLab Ultimate 구독 티어와 GitLab Duo Enterprise가 있어야 합니다.
  • 프로젝트의 멤버여야 합니다.
  • 취약점은 지원되는 분석기가 보고한 SAST 결과여야 합니다:
    • GitLab이 지원하는 분석기 중 하나입니다.
    • 각 취약점에 대해 취약점 위치와 CWE 식별자를 보고하도록 올바르게 통합된 서드파티 SAST 스캐너입니다.
  • 취약점은 지원되는 유형이어야 합니다.

모든 GitLab Duo 기능을 활성화하는 방법을 참고합니다.

취약점을 해결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 선택 사항. 기본 필터를 제거하려면 Clear ([clear])를 선택합니다.
  4. 취약점 목록 위에서 필터 바를 선택합니다.
  5. 나타나는 드롭다운 목록에서 Activity를 선택한 다음 GitLab Duo (AI) 범주에서 Vulnerability Resolution available을 선택합니다.
  6. 필터 필드 밖을 선택합니다. 취약점 심각도 합계와 일치하는 취약점 목록이 업데이트됩니다.
  7. 해결하려는 SAST 취약점을 선택합니다.
    • 취약점 해결을 지원하는 취약점 옆에는 파란색 아이콘이 표시됩니다.
  8. 오른쪽 위에서 Resolve with AI를 선택합니다. 해당 버튼이 표시되지 않으면 AI actions를 선택한 다음 Resolve with AI를 선택합니다. 이 프로젝트가 공개 프로젝트라면 MR을 생성할 때 취약점과 제시된 해결책이 공개적으로 노출된다는 점에 유의합니다. MR을 비공개로 생성하려면 비공개 포크를 생성한 다음 이 과정을 반복합니다.
  9. MR에 커밋을 하나 더 추가합니다. 이렇게 하면 새 파이프라인이 실행됩니다.
  10. 파이프라인이 완료된 후 파이프라인 보안 탭에서 취약점이 더 이상 나타나지 않는지 확인합니다.
  11. 취약점 보고서에서 취약점을 수동으로 업데이트합니다.

AI 해결 제안이 포함된 머지 리퀘스트가 열립니다. 제안된 변경 사항을 검토한 다음 표준 워크플로에 따라 머지 리퀘스트를 처리합니다.

이슈 476553에서 이 기능에 대한 피드백을 남길 수 있습니다.

취약점 해결이 지원하는 취약점#

제안된 해결책의 품질을 보장하기 위해 취약점 해결은 특정 취약점 집합에만 제공됩니다. 시스템은 취약점의 Common Weakness Enumeration(CWE) 식별자를 기준으로 취약점 해결을 제공할지 결정합니다.

현재 취약점 집합은 자동화 시스템과 보안 전문가의 테스트를 기반으로 선택되었습니다. GitLab은 더 많은 유형의 취약점으로 커버리지를 확장하는 작업을 적극적으로 진행하고 있습니다.

취약점 해결이 지원하는 CWE 전체 목록 보기
  • CWE-23: Relative Path Traversal
  • CWE-73: External Control of File Name or Path
  • CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
  • CWE-80: Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)
  • CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
  • CWE-116: Improper Encoding or Escaping of Output
  • CWE-118: Incorrect Access of Indexable Resource ('Range Error')
  • CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer
  • CWE-120: Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')
  • CWE-126: Buffer Over-read
  • CWE-190: Integer Overflow or Wraparound
  • CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
  • CWE-208: Observable Timing Discrepancy
  • CWE-209: Generation of Error Message Containing Sensitive Information
  • CWE-272: Least Privilege Violation
  • CWE-287: Improper Authentication
  • CWE-295: Improper Certificate Validation
  • CWE-297: Improper Validation of Certificate with Host Mismatch
  • CWE-305: Authentication Bypass by Primary Weakness
  • CWE-310: Cryptographic Issues
  • CWE-311: Missing Encryption of Sensitive Data
  • CWE-323: Reusing a Nonce, Key Pair in Encryption
  • CWE-327: Use of a Broken or Risky Cryptographic Algorithm
  • CWE-328: Use of Weak Hash
  • CWE-330: Use of Insufficiently Random Values
  • CWE-338: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
  • CWE-345: Insufficient Verification of Data Authenticity
  • CWE-346: Origin Validation Error
  • CWE-352: Cross-Site Request Forgery
  • CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
  • CWE-369: Divide By Zero
  • CWE-377: Insecure Temporary File
  • CWE-378: Creation of Temporary File With Insecure Permissions
  • CWE-400: Uncontrolled Resource Consumption
  • CWE-489: Active Debug Code
  • CWE-521: Weak Password Requirements
  • CWE-539: Use of Persistent Cookies Containing Sensitive Information
  • CWE-599: Missing Validation of OpenSSL Certificate
  • CWE-611: Improper Restriction of XML External Entity Reference
  • CWE-676: Use of potentially dangerous function
  • CWE-704: Incorrect Type Conversion or Cast
  • CWE-754: Improper Check for Unusual or Exceptional Conditions
  • CWE-770: Allocation of Resources Without Limits or Throttling
  • CWE-1004: Sensitive Cookie Without 'HttpOnly' Flag
  • CWE-1275: Sensitive Cookie with Improper SameSite Attribute

문제 해결#

취약점 해결이 제안 수정을 생성하지 못하는 경우가 있습니다. 일반적인 원인은 다음과 같습니다:

  • 거짓 양성 감지:
    • 수정을 제안하기 전에 AI 모델이 취약점이 유효한지 평가합니다. 해당 취약점이 진짜 취약점이 아니거나 수정할 가치가 없다고 판단할 수 있습니다.
    • 취약점이 테스트 코드에서 발생하는 경우 이런 일이 생길 수 있습니다. 조직에서는 테스트 코드에서 발생한 취약점도 수정하도록 선택할 수 있지만, 모델은 이를 거짓 양성으로 평가하는 경우가 있습니다.
    • 취약점이 거짓 양성이거나 수정할 가치가 없다는 데 동의한다면 취약점을 무시하고 일치하는 이유를 선택해야 합니다.
      • SAST 구성을 사용자 정의하거나 GitLab SAST 규칙의 문제를 보고하려면 SAST 규칙을 참고합니다.
  • 일시적 오류 또는 예기치 않은 오류:
    • 오류 메시지에 an unexpected error has occurred, the upstream AI provider request timed out, something went wrong 또는 이와 비슷한 원인이 표시될 수 있습니다.
    • 이러한 오류는 AI 공급자 또는 GitLab Duo의 일시적인 문제로 발생할 수 있습니다.
    • 새 요청은 성공할 수 있으므로 취약점 해결을 다시 시도할 수 있습니다.
    • 이러한 오류가 계속 나타나면 GitLab에 지원을 요청합니다.

취약점 해결에서 서드파티 AI API와 공유되는 데이터#

다음 데이터가 서드파티 AI API와 공유됩니다:

  • 취약점 이름
  • 취약점 설명
  • 식별자(CWE, OWASP)
  • 취약한 코드 줄이 포함된 전체 파일
  • 취약한 코드 줄(줄 번호)

머지 리퀘스트에서의 취약점 해결#

히스토리

GitLab Duo 취약점 해결을 사용하면 취약점 결과를 해결하는 머지 리퀘스트 제안 코멘트를 자동으로 생성할 수 있습니다. 기본적으로 Anthropic Claude Sonnet 4.6 모델로 구동됩니다.

취약점 결과를 해결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Code > Merge requests를 선택합니다.
  3. 머지 리퀘스트를 선택합니다.
    • 취약점 해결이 지원하는 취약점 결과는 다누키 AI 아이콘([tanuki-ai])으로 표시됩니다.
  4. 지원되는 결과를 선택하여 보안 결과 대화 상자를 엽니다.
  5. 오른쪽 아래에서 Resolve with AI를 선택합니다.

AI 해결 제안이 포함된 코멘트가 머지 리퀘스트에 열립니다. 제안된 변경 사항을 검토한 다음 표준 워크플로에 따라 머지 리퀘스트 제안을 적용합니다.

이슈 476553에서 이 기능에 대한 피드백을 남길 수 있습니다.

문제 해결#

머지 리퀘스트에서의 취약점 해결이 제안 수정을 생성하지 못하는 경우가 있습니다. 일반적인 원인은 다음과 같습니다:

  • 거짓 양성 감지:
    • 수정을 제안하기 전에 AI 모델이 취약점이 유효한지 평가합니다. 해당 취약점이 진짜 취약점이 아니거나 수정할 가치가 없다고 판단할 수 있습니다.
    • 취약점이 테스트 코드에서 발생하는 경우 이런 일이 생길 수 있습니다. 조직에서는 테스트 코드에서 발생한 취약점도 수정하도록 선택할 수 있지만, 모델은 이를 거짓 양성으로 평가하는 경우가 있습니다.
    • 취약점이 거짓 양성이거나 수정할 가치가 없다는 데 동의한다면 취약점을 무시하고 일치하는 이유를 선택해야 합니다.
      • SAST 구성을 사용자 정의하거나 GitLab SAST 규칙의 문제를 보고하려면 SAST 규칙을 참고합니다.
  • 일시적 오류 또는 예기치 않은 오류:
    • 오류 메시지에 an unexpected error has occurred, the upstream AI provider request timed out, something went wrong 또는 이와 비슷한 원인이 표시될 수 있습니다.
    • 이러한 오류는 AI 공급자 또는 GitLab Duo의 일시적인 문제로 발생할 수 있습니다.
    • 새 요청은 성공할 수 있으므로 취약점 해결을 다시 시도할 수 있습니다.
    • 이러한 오류가 계속 나타나면 GitLab에 지원을 요청합니다.
  • Resolution target could not be found in the merge request, unable to create suggestion 오류:
    • 이 오류는 대상 브랜치에서 전체 보안 스캔 파이프라인이 실행되지 않은 경우에 발생할 수 있습니다. 머지 리퀘스트 문서를 참고합니다.

취약점 코드 흐름#

특정 유형의 취약점에 대해 GitLab Advanced SAST는 코드 흐름 정보를 제공합니다. 취약점의 코드 흐름은 모든 할당, 조작, 정화를 거쳐 사용자 입력(소스)에서 취약한 코드 줄(싱크)까지 데이터가 이동하는 경로입니다.

취약점의 코드 흐름을 확인하는 방법에 대한 자세한 내용은 취약점 코드 흐름을 참고합니다.

사용자 이름 인수에서 그것을 실행하는 데이터베이스 쿼리까지 이어지는 SQL 인젝션의 단계를 보여 주는 취약점의 Data flow 섹션

취약점 상태 값#

취약점의 상태는 다음 중 하나입니다:

  • Needs triage: 새로 발견된 취약점의 기본 상태입니다.
  • Confirmed: 사용자가 이 취약점을 보고 정확하다고 확인한 상태입니다.
  • Dismissed: 사용자가 이 취약점을 평가하고 무시한 상태입니다. 무시된 취약점은 이후 스캔에서 감지되어도 무시됩니다.
  • Resolved: 취약점이 수정되었거나 더 이상 존재하지 않습니다. 해결된 취약점이 다시 유입되어 재감지되면 해당 레코드가 복원되고 상태가 Needs triage로 설정됩니다.

취약점은 일반적으로 다음 수명 주기를 거칩니다:

Mermaid 다이어그램 (15줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
stateDiagram
    accTitle: Vulnerability lifecycle
    accDescr: Typical lifecycle of a vulnerability
direction LR
Needs_triage: Needs triage

[*] --&gt; Needs_triage
Needs_triage --&gt; Confirmed
Needs_triage --&gt; Dismissed
Dismissed --&gt; [*]
Confirmed --&gt; Resolved
Resolved --&gt; Needs_triage: If reintroduced and detected again
Resolved --&gt; [*]</code></pre></details></div>

취약점이 더 이상 감지되지 않는 경우#

히스토리

취약점을 해결하려고 의도적으로 변경한 결과로, 또는 다른 변경의 부수 효과로 취약점이 더 이상 감지되지 않을 수 있습니다. 취약점을 보고한 분석기가 해당 언어를 더 이상 스캔하지 않아서 취약점이 더 이상 감지되지 않을 수도 있습니다. 예시는 취약점 변경을 참고합니다. 보안 스캔이 실행되었을 때 기본 브랜치에서 취약점이 더 이상 감지되지 않으면 스캐너는 해당 레코드의 활동 로그에 No longer detected를 추가하지만, 레코드의 상태는 바뀌지 않습니다. 대신 취약점이 해결되었는지 확인한 다음, 해결되었다면 상태를 수동으로 Resolved로 변경합니다. 취약점 관리 정책을 사용하면 특정 기준에 맞는 취약점의 상태를 자동으로 Resolved로 변경할 수도 있습니다.

취약점을 해결한 커밋에 대한 링크는 취약점 페이지의 Activity 섹션에서 확인할 수 있습니다.

취약점 무시 이유#

취약점을 무시할 때는 다음 이유 중 하나를 선택해야 합니다:

  • Acceptable risk: 취약점이 알려져 있고 해결이나 완화가 되지 않았지만, 허용 가능한 비즈니스 위험으로 간주됩니다.
  • False positive: 시스템에 취약점이 없는데도 취약점이 있다고 잘못 표시하는 보고 오류입니다.
  • Mitigating control: 조직이 채택한 관리적, 운영적 또는 기술적 통제(즉, 보호 장치나 대책)가 정보 시스템에 동등하거나 비슷한 수준의 보호를 제공하여 취약점의 위험을 완화합니다.
  • Used in tests: 해당 결과는 테스트의 일부이거나 테스트 데이터이므로 취약점이 아닙니다.
  • Not applicable: 취약점이 알려져 있고 해결이나 완화가 되지 않았지만, 업데이트되지 않을 애플리케이션 부분에 있는 것으로 간주됩니다.

취약점 상태 변경#

히스토리
  • Developer 역할을 가진 사용자가 취약점 상태를 변경할 수 있게 하던 권한(admin_vulnerability)이 GitLab 16.4에서 더 이상 사용되지 않음으로 표시되고 GitLab 17.0에서 제거됨.
  • Comment 텍스트 상자가 GitLab 17.9에서 추가됨.

사전 요구 사항:

  • 프로젝트에 대한 Security Manager, Maintainer 또는 Owner 역할이나, admin_vulnerability 권한이 있는 사용자 정의 역할이 있어야 합니다.

취약점 페이지에서 취약점 상태를 변경하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. 오른쪽 사이드바의 Status 섹션에서 Edit를 선택합니다.
  5. Status 드롭다운 목록에서 상태를 선택하거나, 취약점 상태를 Dismissed로 변경하려면 무시 이유를 선택합니다.
  6. Comment 텍스트 상자에 무시 이유에 대한 자세한 내용을 담은 코멘트를 입력합니다. Dismissed 상태를 적용할 때는 코멘트가 필요합니다.
  7. Change status를 선택합니다.

변경한 사람과 변경 시점을 포함한 상태 변경 세부 정보가 취약점 페이지의 Activity 섹션에 기록됩니다.

취약점에 대한 GitLab 이슈 생성#

취약점을 해결하거나 완화하기 위해 취한 조치를 추적하는 GitLab 이슈를 생성할 수 있습니다. 취약점에 대한 GitLab 이슈를 생성하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. Create issue를 선택합니다.

취약점 보고서의 정보를 담은 이슈가 GitLab 프로젝트에 생성됩니다.

Jira 이슈를 생성하려면 취약점에 대한 Jira 이슈 생성을 참고합니다.

취약점을 GitLab 및 Jira 이슈에 연결#

취약점을 하나 이상의 기존 GitLab 이슈 또는 Jira 이슈에 연결할 수 있습니다. 연결 기능은 한 번에 하나만 사용할 수 있습니다. 링크를 추가하면 취약점을 해결하거나 완화하는 이슈를 추적하는 데 도움이 됩니다.

취약점을 기존 GitLab 이슈에 연결#

사전 요구 사항:

취약점을 기존 GitLab 이슈에 연결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. Related issues 섹션에서 Add existing issue를 선택합니다.
  5. 연결할 각 이슈에 대해 다음 중 하나를 수행합니다:
    • 이슈 링크를 붙여넣습니다.
    • 이슈의 ID를 입력합니다(앞에 해시 #를 붙입니다).
  6. Add를 선택합니다.

선택한 GitLab 이슈가 Related issues 섹션에 추가되고 연결된 이슈 카운터가 업데이트됩니다.

취약점에 연결된 GitLab 이슈는 취약점 보고서와 취약점 페이지에 표시됩니다.

취약점과 연결된 GitLab 이슈 사이의 다음 조건에 유의합니다:

  • 취약점 페이지에는 관련 이슈가 표시되지만, 이슈 페이지에는 그 이슈가 관련된 취약점이 표시되지 않습니다.
  • 이슈는 한 번에 하나의 취약점에만 연결할 수 있습니다.
  • 이슈는 그룹과 프로젝트를 넘어 연결할 수 있습니다.

취약점을 기존 Jira 이슈에 연결#

사전 요구 사항:

  • Jira 이슈 통합이 구성되어 있고 Create Jira issues for vulnerabilities 체크박스가 선택되어 있어야 합니다.

취약점을 기존 Jira 이슈에 연결하려면 Jira 이슈 설명에 다음 줄을 추가합니다:

/-/security/vulnerabilities/<id>

<id>는 임의의 취약점 ID입니다. 서로 다른 ID를 담은 여러 줄을 하나의 설명에 추가할 수 있습니다.

적절한 설명이 포함된 Jira 이슈가 Related Jira issues 섹션에 추가되고 연결된 이슈 카운터가 업데이트됩니다.

취약점에 연결된 Jira 이슈는 취약점 페이지에만 표시됩니다.

취약점과 연결된 Jira 이슈 사이의 다음 조건에 유의합니다:

  • 취약점 페이지와 이슈 페이지 모두 서로 관련된 취약점을 표시합니다.
  • 이슈는 한 번에 하나 이상의 취약점에 연결될 수 있습니다.

취약점 해결 절차#

일부 취약점은 해결책이 이미 알려져 있지만 수동으로 구현해야 합니다. 취약점 페이지의 Remediation 섹션에는 보안 결과를 보고한 보안 스캔 도구가 제공한 해결책이나 취약점을 수동으로 생성할 때 입력한 해결책이 표시됩니다. GitLab 도구는 GitLab 어드바이저리 데이터베이스의 정보를 활용합니다.

또한 일부 도구는 제안된 해결책을 적용하는 소프트웨어 패치를 포함할 수 있습니다. 이 경우 취약점 페이지의 Other actions 드롭다운 목록에 Resolve with scanner suggestion 작업이 포함됩니다.

이 기능이 지원하는 스캐너는 다음과 같습니다:

취약점을 해결하려면 다음 중 하나를 수행합니다:

머지 리퀘스트로 취약점 해결#

머지 리퀘스트로 취약점을 해결하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. 오른쪽 위에서 Other actions를 선택한 다음 Resolve with scanner suggestion을 선택합니다.

취약점을 해결하는 데 필요한 패치를 적용하는 머지 리퀘스트가 생성됩니다. 표준 워크플로에 따라 머지 리퀘스트를 처리합니다.

취약점 수동 해결#

GitLab이 취약점에 대해 생성한 패치를 수동으로 적용하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 취약점 설명을 선택합니다.
  4. 오른쪽 위에서 Other actions를 선택한 다음 Download Patch를 선택합니다.
  5. 로컬 프로젝트에 패치를 생성할 때 사용한 것과 같은 커밋이 체크아웃되어 있는지 확인합니다.
  6. git apply remediation.patch를 실행합니다.
  7. 변경 사항을 확인하고 브랜치에 커밋합니다.
  8. 변경 사항을 main 브랜치에 적용하는 머지 리퀘스트를 생성합니다.
  9. 표준 워크플로에 따라 머지 리퀘스트를 처리합니다.

취약점에 대한 보안 교육 활성화#

Note

보안 교육은 보안 조치로 공용 인터넷과 분리된 컴퓨터, 즉 오프라인 환경에서는 이용할 수 없습니다. 구체적으로는 활성화하려는 교육 제공업체의 API 엔드포인트를 GitLab 서버가 조회할 수 있어야 합니다. 일부 서드파티 교육 공급업체는 무료 계정 등록을 요구할 수 있습니다. Secure Code Warrior, Kontra, SecureFlag 중 하나로 이동해 계정을 등록합니다. GitLab은 이러한 서드파티 공급업체에 사용자 정보를 전송하지 않습니다. GitLab이 전송하는 것은 CWE 또는 OWASP 식별자와 파일 확장자의 언어 이름입니다.

보안 교육은 개발자가 취약점을 수정하는 방법을 익히는 데 도움이 됩니다. 개발자는 감지된 취약점과 관련된 보안 교육을 선택된 교육 제공업체로부터 확인할 수 있습니다.

프로젝트에서 취약점에 대한 보안 교육을 활성화하려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
  3. 탭 바에서 Vulnerability Management를 선택합니다.
  4. 보안 교육 제공업체를 활성화하려면 토글을 켭니다.

각 통합은 CWE 또는 OWASP 같은 취약점 식별자와 언어를 보안 교육 공급업체에 제출합니다. 그 결과로 만들어진 공급업체 교육 링크가 GitLab 취약점에 표시됩니다.

취약점에 대한 보안 교육 보기#

보안 교육이 활성화되어 있으면 취약점 페이지에 감지된 취약점과 관련된 교육 링크가 표시될 수 있습니다. 교육 제공 여부는 활성화된 교육 공급업체가 해당 취약점에 맞는 콘텐츠를 보유하고 있는지에 따라 달라집니다. 교육 콘텐츠는 취약점 식별자를 기준으로 요청됩니다. 취약점에 부여되는 식별자는 취약점마다 다르고, 제공되는 교육 콘텐츠도 공급업체마다 다릅니다. 일부 취약점은 교육 콘텐츠를 표시하지 않습니다. CWE가 있는 취약점은 교육 결과를 반환할 가능성이 가장 높습니다.

취약점에 대한 보안 교육을 보려면 다음과 같이 진행합니다:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Vulnerability report를 선택합니다.
  3. 보안 교육을 보려는 취약점을 선택합니다.
  4. Supplementary information 섹션의 Training 아래에서 View training을 선택합니다.

전이적 의존성에서 취약점 위치 보기#

히스토리
Feature flag

이 기능의 사용 가능 여부는 피처 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

의존성에서 발견된 취약점을 관리할 때 취약점 페이지의 Details 섹션에는 다음이 표시됩니다:

  • 취약점이 발견된 직접 의존성의 위치입니다.
  • 가능한 경우 취약점이 발생하는 구체적인 줄 번호입니다.

취약점이 하나 이상의 전이적 의존성에서 발생하는 경우에는 직접 의존성만 알아서는 충분하지 않을 수 있습니다. 전이적 의존성은 직접 의존하는 항목을 상위에 두고 있는 간접 의존성입니다.

전이적 의존성이 있으면 취약점을 포함한 전이적 의존성을 비롯해 모든 의존성에 이르는 경로를 볼 수 있습니다.

  • 취약점 페이지의 Details 섹션에서 View dependency paths를 선택합니다. View dependency paths가 표시되지 않으면 전이적 의존성이 없습니다.