AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1120740
Accepted
JohnLBevan
JohnLBevan
Asked: 2023-01-21 08:15:06 +0800 CST2023-01-21 08:15:06 +0800 CST 2023-01-21 08:15:06 +0800 CST

Outlook 的 SafeLinks 发送 GET 请求 - 为什么这不是一个更大的问题?

  • 772

我们注意到我们的人力资源系统存在一个问题,用户请求请假,此批准会发送给他们的经理,当他们的经理单击链接以批准它时,他们会看到一条错误消息,说明请假已获批准......这似乎是因为Outlook向HR系统的approval URI发送GET请求,以检查链接是否恶意;但在这样做时,它批准了员工的休假。注意:此 GET 请求甚至在电子邮件被预览之前发送/不是由收件人用户的任何操作触发。

人力资源系统是第三方,支持不力,所以他们无法证实我们对发生的事情的理论......但是,我已经通过从包含链接的外部电子邮件地址发送邮件进行测试我支持的网站(但不在 Outlook 的已验证域列表中)。查看我服务器上的日志,我看到在这封测试邮件到达我的邮件客户端后的片刻(我没有点击链接,甚至没有预览邮件的内容),果然一个 GET 请求出现在我的日志中,来自一个属于MS(根据 IP 上的 whois)。

这看起来很糟糕......但是我们与其他具有单击链接的系统一起工作(用于批准,以及许多包含unsubscribe链接或verify my email单击即可工作的链接/不需要手动跟进的电子邮件)和我们似乎没有类似的问题;在所有这些情况下,网站所有者似乎不太可能将与 SafeLinks 相关联的 MS IP 列入黑名单(尤其是好像它很容易绕过一样,恶意行为者也可以使用这种技巧来躲避安全链接保护)。

  • 我们关于 SafeLinks 导致批准的理论可能是正确的吗?
  • 如果是这样,是否有一些解释为什么它没有影响更多系统?
exchange
  • 3 3 个回答
  • 75 Views

3 个回答

  • Voted
  1. Esa Jokinen
    2023-01-21T10:50:00+08:002023-01-21T10:50:00+08:00

    尽管“安全链接”导致的问题多于解决的问题有多种原因,但这也是人力资源系统中的设计缺陷和漏洞:

    1. 这样的操作应该需要身份验证,即具有操作所需权限的用户应该登录。“安全链接”不是来自经过身份验证的会话。它可以属于以下任何类别:

      • CWE-306:缺少关键功能的身份验证

        该产品不会对需要可证明的用户身份或消耗大量资源的功能执行任何身份验证。

      • CWE-862:缺少授权

        当参与者试图访问资源或执行操作时,软件不会执行授权检查。

      • CWE-749:暴露的危险方法或功能

        该软件提供应用程序编程接口 (API) 或类似接口用于与外部参与者交互,但该接口包含未适当限制的危险方法或功能。

      即使链接有随机部分,它也不够强大,因为链接很容易泄漏或被猜测。

      • CWE-1390:弱认证

        该产品使用身份验证机制来限制对特定用户或身份的访问,但该机制不能充分证明声称的身份是正确的。

    2. 系统不应该根据单个GET请求执行批准或拒绝操作,但链接页面应该,例如,具有按钮以通过单独的POST请求确认所需的操作。

      这甚至在 HTTP 语义、RFC 9110、9.2.1中被推荐:

      9.2.1. 安全方法

      如果请求方法定义的语义本质上是只读的,则请求方法被认为是“安全的”;即,客户端不请求也不期望由于对目标资源应用安全方法而导致源服务器上的任何状态更改。- -

      在本规范定义的请求方法中,GET、HEAD、OPTIONS 和 TRACE 方法被定义为安全的。

      区分安全和不安全方法的目的是让自动检索过程(蜘蛛)和缓存性能优化(预取)工作而不必担心造成伤害。此外,它允许用户代理在处理可能不受信任的内容时对不安全方法的自动使用应用适当的约束。

    请将此漏洞报告给软件供应商。

    • 3
  2. Best Answer
    vidarlo
    2023-01-21T10:25:07+08:002023-01-21T10:25:07+08:00

    这似乎是因为Outlook向HR系统的批准URI发送了一个GET请求,以检查该链接是否是恶意的;但在这样做时,它批准了员工的休假。

    这违反了相关技术规范和最佳实践。

    来自 RFC7231:

    如果请求方法定义的语义本质上是只读的,则请求方法被认为是“安全的”;即,客户端不请求也不期望由于对目标资源应用安全方法而导致源服务器上的任何状态更改。同样,合理使用安全方法预计不会对源服务器造成任何伤害、财产损失或异常负担。

    根据相同的标准,Get 是一个安全、幂等的请求。根据标准明确允许Outlook 执行的操作:

    在本规范定义的请求方法中,GET、HEAD、OPTIONS 和 TRACE 方法被定义为安全的。

    区分安全和不安全方法的目的是让自动检索过程(蜘蛛)和缓存性能优化(预取)工作而不必担心造成伤害。此外,它允许用户代理在处理可能不受信任的内容时对不安全方法的自动使用应用适当的约束。

    您的 HR 应用已损坏,应该更新。

    • 2
  3. JohnLBevan
    2023-01-21T08:30:22+08:002023-01-21T08:30:22+08:00

    经过更多的实验,我想我找到了原因。

    没有问题的 URI 都包含查询字符串;我们有问题的那个没有。

    将测试发送到https://example.com/approve?try=this而不是在我的站点日志中看到返回的确切 URI,我看到请求GET已发送到https://example.com/approve?try=bcce;即查询字符串中名称-值对的值部分被替换为垃圾值。也就是说,这种行为在我的测试中并不一致/我不确定 MS 在何时替换值和何时离开它们方面遵循什么规则。

    似乎其他人以前也遇到过这个问题;这个线程有很多很好的讨论。

    从客户端的角度来看,最好的解决方法是将 URL 列入白名单,这样 SafeLinks 就不会扫描它。MS Docs中的更多信息。

    • 0

相关问题

  • 如何在使用 RPC over HTTPS 时停止 Outlook 2007 要求提供凭据

  • Exchange 备份的 NT 备份是否会使 Exchange 脱机?

  • 如何在 Exchange 2007 中设置资源邮箱日历的忙/闲权限?

  • Exchange 2007:将带有 SenderID 的邮件移动到垃圾邮件文件夹失败?

  • 如何使用 Exchange 2003 SP2 将垃圾邮件发送到个人垃圾文件夹?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve