OWASP ZAP 基线扫描在 CI/CD 管道中返回意外错误 1

OWASP ZAP baseline scan returns unexpected error 1 in CI/CD pipeline

提问人:Raphaël 提问时间:10/26/2023 更新时间:11/4/2023 访问量:41

问:

我在管道中使用来自 OWASP 的 docker 映像来扫描我的 Web 应用程序并生成 HTML 报告,我遇到了一个我花了一整天时间试图解决的问题。

运行扫描作业时,它会成功扫描网站,但在执行扫描命令后,作业会立即停止并返回“错误:作业失败:退出代码 1”。

这种情况发生时,没有对命令中失败的内容进行精确定位。

这是我的工作代码:

zap_scan:
  stage: owasp
  image:
    name: owasp/zap2docker-stable
  script:
    - mkdir /zap/wrk
    - /zap/zap-baseline.py -t http://webURL.com -g gen.conf -r /zap/wrk/report.html
  artifacts:
    paths:
      - /zap/wrk/report.html

通常,这不应该返回错误,因为我已经通过在本地构建的相同 docker 映像上运行它来测试扫描命令,并且我没有遇到任何问题(即扫描和文件已正确生成)。

这是 zap-baseline.py 脚本的开源代码

通过对此进行研究,我发现如果 fail_count 不同于 0,脚本可能会返回错误 1。

我不明白为什么脚本在本地 docker 映像和管道中的行为不同,你能帮我吗?

docker gitlab-ci 流水线 owasp zap

评论


答:

0赞 Simon Bennetts 10/26/2023 #1

您需要共享扫描的完整输出(混淆任何敏感内容),以便我们能够提供更多帮助。

顺便说一句,你为什么要指定?这将生成一个配置文件,您似乎没有使用该文件。-g gen.conf

评论

0赞 Raphaël 10/26/2023
由于公司政策,我无法共享扫描的完整输出,但是我可以向您保证,来自本地 docker 映像的扫描是完全干净的,没有问题。我认为这个问题与管道文件操作有关,如果我在管道中扫描后添加另一个命令,该命令将不会执行,并且作业将在扫描后立即终止。conf 文件是默认文件,可能没有必要使用它,但它不是错误的来源,因为它是在没有选项配置文件的情况下复制的。
0赞 Simon Bennetts 10/27/2023
所以听起来它不是 ZAP 问题?
1赞 Raphaël 10/30/2023
这实际上不是 ZAP 问题。当脚本返回 1 时,Gitlab 会发送自动错误,这是因为扫描有警告。添加选项 -I 修复了错误。
0赞 Raphaël 10/30/2023 #2

当脚本返回 1 时,Gitlab 会发送自动错误,这是因为扫描有警告。添加选项 -I 修复了错误。

0赞 Sanjay Bharwani 11/4/2023 #3

以下是用于 zap 扫描的工作 gitlab 作业。

zap-scan:
  stage: owasp
  image:
    name: owasp/zap2docker-stable:latest
  before_script:
    - mkdir -p /zap/wrk
  script:
    - echo "Starting zap-api-scan.py baseline scan"
    - cp ./owasp-zap/warn-levels.config /zap/wrk
    - zap-api-scan.py -t http://webURL.com -c warn-levels.config -w testreport.md -r testreport.html -S -I
    - cp /zap/wrk/testreport.md testreport.md
    - cp /zap/wrk/testreport.html testreport.html
    - grep -Po '\| High \| 0 \|' testreport.md
    - grep -Po '\| Medium \| 0 \|' testreport.md
  artifacts:
    when: always
    paths:
      - zap.out
      - testreport.md
      - testreport.html

请注意,您可以提供这个额外的配置来配置要忽略的错误。-c with warn-levels.config

在我们的例子中,我们想排除

WARN-NEW: Spring Actuator Information Leak [40042] x 1

因此,该文件如下所示warn-levels.config

40042   IGNORE  (Spring Actuator Information Leak - Active/release)

各种标志的参考 https://www.zaproxy.org/docs/docker/api-scan/#usage