你几个月前装的那个 GitHub App,权限可能还全开着,去看看
Published:
我当时正在配置第二份 Cloudflare 备份——核实一份数据、再搭建另一份——帮我干活的 AI Agent 顺手提醒了我一件不相关的事:在列出哪些东西能访问我的 GitHub 账号时,有一项授权的范围明显大得不正常。就是这一句提醒,让我花了一个多小时去仔细过了一遍 GitHub 的已安装应用列表,而这一个小时非常值得。
好在没有任何东西被滥用,没有数据泄露,也没有东西被删除。但我发现那些安安静静躺在那里、早已获得授权的东西,是一个足够普遍的问题,值得写清楚:GitHub 上有两类不同的第三方访问权限,每一类当初都是因为一个具体理由被授予一次,但每一类如今持有的权限,都远远超出了当初那个理由本身。
两种不同的授权方式,区别为什么重要
GitHub 有两种相关但本质不同的机制,用来让外部工具接触你的账号,而这个区别,直接决定了每一种的危险程度。
GitHub App 安装(Installed App) 的范围限定在你选择的具体仓库上,权限也是具体的,比如”写入仓库内容”或”读取 Pull Request”。你可以在 github.com/settings/installations 查看并收紧这份清单。
OAuth App 授权 则不同,范围也更大。它不是被限定在一个或几个仓库上,而是可以让某个服务”像你本人一样”行动,使用你账号本身的权限,触达你账号能到达的一切地方,包括你所在的组织。这类授权要单独在 github.com/settings/applications 查看。
大多数人,包括我自己,偶尔会瞥一眼第一份清单,但几乎从不会去想第二份,因为它在体验上更像是一次性的”登录”步骤,而不是一份持续生效的授权。
我发现了什么
我平时用的一个 AI 编程助手,持有一个 OAuth 授权,允许它以我的名义在四个不同的 GitHub 账号上行动,而不只是一个。其中两个是我并不完全掌控的组织。这个授权是我几个月前,为了一个很具体、很窄的任务而给出的一次性授权。而它就这样一直保留着完整的访问范围,安安静静地,因为日常使用这个工具的过程中,从来没有任何东西会主动把”它现在到底还能做什么”摆到我面前。
另外,一个大约六个月前为了某次一次性部署配置而安装的集成应用,至今仍然对它能看到的每一个仓库,持有仓库管理设置、Webhook 和 Pull Request 的完整读写权限。我从来没有回头检查过,这个权限范围是否还符合我现在实际需要它做的事情,因为没有任何东西提醒我这么做。
这两件事都不是因为什么恶意行为造成的。它们只是安静地待在那里,什么坏事都没做——就像抽屉里一把备用钥匙,早已过了当初配它的理由,却还一直躺在那儿。真正的风险,不在于这两个应用主动做了什么出格的事,而在于:在我真正去看之前,我完全不知道,究竟有什么东西能够操作我的账号,以及这个操作范围到底有多大。
为什么这在 AI Agent 时代更值得重视
这种模式其实在 AI Agent 出现之前就一直存在:过度宽泛的 OAuth 授权范围、长期未被重新审视的应用安装,从来都是真实存在的风险。AI Agent 真正改变的是你积累这些授权的速度,以及你有多容易停止注意到它们。
当你借助 Agent 快速推进工作、接入各种集成、连接各种服务、搭建自动化部署时,”授予权限”往往只是完成另一件事过程中一次摩擦很小的点击。你为了让任务继续推进而授权了某个应用,任务完成了,而这份授权本身,却比它存在的理由活得更久。把这个过程乘以你在一两年时间里连接过的每一个集成应用,”已安装应用”和”已授权应用”这两个页面,就变成了一片安静却在不断扩大的暴露面,没有人在主动盯着它。
一个帮你快速搭建东西的 Agent,同样也会在你让它这么做的时候,毫不犹豫地替你点掉一个 OAuth 授权确认页面,因为从它的角度看,这只是为了让下一步能继续推进。它没有任何独立的理由去提醒你:”顺便说一句,这个授权六个月后可能还会原封不动地留在这里,没人重新审视过。”这恰恰是人该做的事,也恰恰是最容易被跳过的一步。
到底该检查什么
这不需要多深的安全专业知识,只需要两个页面,外加几分钟时间。
- 打开
github.com/settings/installations。逐一检查每个已安装的应用能访问哪些仓库、持有哪些权限。凡是超出这个应用实际用途所需的范围,都应该收紧。 - 打开
github.com/settings/applications。这是大多数人会跳过的一页。检查每一个 OAuth 授权到底覆盖了多少个账号和组织,而不只是仓库。凡是你不清楚记得最近授予过的、以及授权范围明显超出当初那个具体任务的,都应该撤销。 - 把”这个我几个月前就配好了,一直用得好好的”当作一个”该去检查一下”的信号,而不是”可以放着不管”的理由。”能正常工作”和”权限范围仍然合适”是两件不同的事,而其中只有一件,在你不去看的情况下是看不出来的。
在一个我自认为已经相当留意的账号上,我在不到一个小时内,就在这两类授权里都找到了真实、可以修正的过度授权问题。工具本身不是问题所在,一个从未被重新审视过的默认设置才是。
