发布于 2026-01-06 0 阅读
0

如何在 Power Automate 中成为一名白帽黑客

如何在 Power Automate 中成为一名白帽黑客

如果有人不幸读过我之前的博客,就会知道我喜欢研究 Power Platform。这包括误用功能,以及发现真正的漏洞或配置问题。我非常享受了解事物运作原理和解决问题的过程(这大概也是我成为工程师的原因),而寻找漏洞正是满足这种好奇心的好方法。所以今天我想分享一下我寻找漏洞的过程,在这个例子中,微软胜过了我。

具体步骤如下:

  1. 确定您需要的权限。
  2. 如何授予该权限
  3. 权限控制着什么?
  4. 绕过控制

过程


1. 确定您需要的权限

所以,在这种情况下,我正在研究人脉关系,它们是这个平台上最有价值的东西。我想在我的流程中使用其他人的人脉关系,这样我就可以做一些事情,比如……

  • 阅读邮件
  • 发送/批准电子邮件
  • 访问安全数据

您可能需要了解许多不同的权限,例如:

  • 使用提升的 DLP 权限访问环境
  • 读取流程日志
  • 编辑生产应用程序/流程
  • 删除我没有权限的记录

2. 如何授予该权限

共享连接的方式有几种,但最常见的是通过共享流程。如果您与他人共享一个流程,您也就共享了这些连接。

分享流

3. 该权限有哪些控制措施

在创建流程时,我只能选择自己的连接/连接引用。用户界面甚至不允许我查看其他人的连接,更不用说选择了。

但如果流程是由另一位创建者创建并与我分享的,那么我就可以看到他们的连接。在流程中,我可以添加新的操作并使用这些连接。

添加连接

但我无法将该操作粘贴到新的流程中。

无法粘贴到新流程中

我也无法保存包含连接的副本,它强制我创建一个新的连接。

无法保存

看来连接周围有很多控制措施,而且与流程相关。

4. 绕过控制

接下来才是难点,我们了解了流程,现在需要找出薄弱环节。根据我的经验,Power Platform 在两个关键安全原则上存在缺陷:

  • PoLP(最小特权原则)
  • 纵深防御

PoLP 提供精确的访问权限,但这会增加复杂性,因此人们常常更容易授予某人高于实际所需的权限。纵深防御旨在保护所有层级,但我发现通常只有用户界面 (UI) 受到保护,而它调用的 API 却没有。

在这种情况下,我同时采用了上述两种方法:赋予用户超出其权限的权限,并通过 API 调用绕过控制。我还计划对平台进行更改,使其从非解决方案感知型转变为解决方案感知型。连接引用与流程中包含的原始连接不同。因此,流程和连接之间的这种断点可能是一个安全漏洞。

我的想法是这样的:

  • 作为系统定制员/系统管理员,我可以分享连接参考信息。
  • 连接引用中包含连接信息。
  • 那么我能否使用连接引用通过 API 创建流程?

黑客过程

在使用 API 时,我主要使用 2 个工具:

  • 浏览器开发工具
  • 邮差

浏览器开发者工具:
使用浏览器中的开发者工具,您可以查看 Power Platform 正在调用哪些 API,最重要的是,您可以借用身份验证令牌(它很快就会过期,因此您必须不断更新它)。

令牌

回复

Postman
是一个 API 客户端,允许你调用任何 HTTP(S) 端点并查看响应。虽然还有其他一些客户端,但 Postman 已经成为我的首选。

邮差

Postman 具有环境变量,允许您在不更改实际调用的情况下替换 URL 和参数。它们通过以下方式显示{{varName}}

Postman 环境变量


那么,我们来看看能否通过我们创建的包含连接引用的流程来获取某人的连接信息。需要特别注意的是,攻击者需要拥有环境中的高级权限(很可能是系统管理员或系统自定义人员),才能获得对连接引用表的完全读取/共享权限。

首先列出用户
,我查询 systemuser 表以返回我的 systemuserid 和目标用户。
列出用户

列出连接
然后我使用目标系统用户 ID 查询连接引用表,这样我就可以找到我想要的连接类型,并在创建流程时使用这些值。
列出连接


通过 connectionreferenceid 和我的 systemuserid,我可以与我共享所需的连接引用
共享连接参考

创建流程
现在我已经拥有了所有需要的组件,我更新流程定义以使用连接引用数据。

{\"properties\":{\"connectionReferences\":{\"shared_sharepointonline\":{\"connectionName\":\"{{connection}}\",\"source\":\"Embedded\",\"id\":\"/providers/Microsoft.PowerApps/apis{{connectorid}}\",\"tier\":\"NotSpecified\"}},
Enter fullscreen mode Exit fullscreen mode

在 API 调用中,需要将 JSON 数据转换为字符串。

创建流程

获取工作流 工作
流应该已经创建,但尚未启用。因此,我们使用工作流名称查询工作流表,以返回工作流 ID。
获取工作流程

启用流程
最后一步,我们使用 workflowid 修补流程,将其设置为开启。

{
  "statecode": 1,
  "statuscode": 2
}
Enter fullscreen mode Exit fullscreen mode

开启流量

结果失败了……

开启用户界面

我也尝试过使用用户界面,但看来微软已经领先一步了。共享连接引用并不会像在流程中那样触发连接的共享。我还怀疑,如果我通过 Dataverse API 共享流程(就像我共享连接引用那样),它也不会生效。共享流程时,肯定运行着另一个 API,该 API 也共享了连接。

我还尝试使用我的连接创建流程,将其启用,然后通过 Patch 更新连接引用,但这同样行不通。

如果你想看看我的邮差收藏,可以点击这里。


这就是寻找漏洞的意义所在:大多数时候你什么也找不到。但这却是一项极好的练习,能让你深入了解平台的工作原理。这种经验对日常开发工作大有裨益,而且偶尔你确实能发现一些问题,这些问题能为整个系统增添价值,这非常棒😎

文章来源:https://dev.to/wyattdave/how-to-be-a-white-hat-hacker-in-power-automate-fpb