CVE-2026-44695Outline是一款允许进行协作文档编写的服务。在1.7.1版本之前,其Slack集成功能存在一个安全漏洞。具体而言,GET /auth/slack.post回调接口接受未签名且不依赖于会话的OAuth状态值。如果第三方攻击者能够获取针对同一Outline Slack客户端的Slack OAuth code,就可以诱导已登录的Outline用户完成回调流程。这将导致受害者的Outline账户被错误地链接到攻击者的Slack team_id和user_id。一旦绑定成功,攻击者利用该关联的Slack身份,可以使用Slack的/outline搜索命令,以受害用户的权限进行搜索操作。该漏洞已在1.7.1版本中修复。
该漏洞的根源在于Outline在处理Slack OAuth回调时缺乏对state参数的严格验证。在标准的OAuth 2.0授权流程中,state参数用于防止跨站请求伪造(CSRF)攻击,并确保回调请求是由发起请求的同一用户会话发起的,通常应该是签名的或与会话强绑定的随机值。
在受影响的Outline版本中,`/auth/slack.post`端点接受任意提供的state值,只要配合有效的OAuth code即可。攻击者首先需要针对Outline应用注册的Slack客户端发起OAuth授权流程,获取一个有效的OAuth code。由于Outline的Slack客户端ID通常是公开的,攻击者可以模拟这一过程。
随后,攻击者构造一个恶意链接,包含获取到的OAuth code和任意构造的state参数,发送给目标受害者。当受害者(已登录Outline)点击该链接或触发请求时,Outline服务器接收到回调。由于服务器未验证state与会话的对应关系(即未验证state是否由该用户会话生成),服务器错误地认为这是受害者的合法绑定操作。结果,服务器将攻击者的Slack身份(team_id, user_id)与受害者的Outline账户进行了绑定。此后,攻击者在绑定的Slack工作区中使用`/outline`搜索命令时,Outline系统会识别为受害用户发起的请求,从而返回受害用户有权限查看的文档搜索结果。这构成了严重的身份混淆和信息泄露风险。