白帽故事 · 2023年8月13日 0

利用 GitHub 最大化你的漏洞数量

背景介绍:

对于漏洞赏金猎人,GitHub 存储库可以发现各种有用的信息,并不是只有开源目标才会出现问题,有时,企业/组织成员及其开源计划会错误地披露可用于对付目标公司的信息。本文将为你提供各种扫描 GitHub 存储库中敏感信息的方法和工具,以助你最大化发现漏洞。

最大化Cloning:

你完全可以只在 github.com 网站上进行研究,但是为了更好的进行本地测试,建议克隆每个目标库。@mazen160 的 GitHubCloner 就是一个很棒的工具。它用起来非常简单:

$ python githubcloner.py --org organization -o /tmp/output

静态分析:

在开始静态分析之前,真正理解目标项目至关重要。白帽 @Jobert 会建议在寻找漏洞之前应对目标有很好的了解。

人工分析:

“learn to make it, then break it”这句话适用于人工分析。如果你能学习一门编程语言,你就能够理解要采取和避免的安全预防措施。

一旦熟悉了目标及其架构,就可以开始寻找感兴趣、熟悉或知道开发人员经常出错的关键字。

以下是在第一次‘泛泛’寻找期间使用的一些搜索词的基本列表:

API and key. (Get some more endpoints and find API keys.)
token
secret
TODO
password
vulnerable
http:// & https://

另外还会关注:

CSRF
random
hash
MD5, SHA-1, SHA-2, etc.
HMAC

当你习惯了某些漏洞类型时,就会确切地知道在特定语言中寻找什么,例如,当在 Java 中寻找时序泄漏时,我知道 Arrays.equals() 和 HMAC 会共同导致该漏洞。

另一个关键步骤是查看提交历史记录,你会从这些历史提交中收集到的信息量感到惊讶。我曾见过贡献者错误地认为他们已经删除了凭据,而他们仍在提交历史记录中。由于 git 的历史,我发现了仍在运行的古老端点。

file

工具:

在执行 Python 项目时使用的主要工具是 Bandit

Bandit 会识别常见问题,但也会返回误报结果。所以请谨慎使用。
$ bandit -r path/to/your/code -ll

如果你想在项目中查找过时的 Python 模块,请将 requirements.txt 的内容粘贴到 https://pyup.io/tools/requirements-checker/ 中,这将显示指定版本的模块中是否存在任何安全问题。

Snyk.io 是一个用于检查依赖项的出色工具,该平台支持多种语言。

file

对于信息侦察,许多研究人员建议使用 Gitrob,此工具将在公共 GitHub 存储库中查找敏感信息。

$ gitrob analyze acme,johndoe,janedoe

要查找API 密钥、令牌、密码等字符串,可以使用 truffleHog。
$ truffleHog https://github.com/dxa4481/truffleHog.git

如果你正在寻找一个一体化的查找器,@anshuman_bh 的 git-all-secrets 是款适合的工具。该工具将多个开源敏感信息查找器组合成一个大工具。对于 Ruby on Rails 应用程序,推荐 Brakeman。Brakeman 是一个静态分析安全扫描器,可以在代码中发现大量的各种安全问题。 另外使用 Gerben Javado 的 LinkFinder 在存储库的 JS 文件中查找端点。
$ python linkfinder.py -i 'path/to/your/code/*.js' -r ^/api/ -o cli

报告你的发现:

当涉及到漏洞赏金时,请仔细阅读目标赏金计划的政策,很少有程序通过 GitHub 接受报告,请联系安全团队,或者使用漏洞赏金平台,例如 HackerOne 或 BugCrowd

顺带说一句,白盒审计的一个很酷的事情,由于你可以访问代码,因此能够更容易地提出修复建议或提交补丁。加油吧,骚年~ 😉