文章总结: OrkesConductor存在未认证RCE漏洞CVE-2026-58138,已遭在野利用。攻击者可通过工作流API提交内联脚本表达式执行系统命令。官方已在3.30.2版本修复,但大量暴露实例仍面临风险。建议优先封堵网络路径、升级版本、排查异常子进程与工作流记录,并轮换受影响凭据。
综合评分: 85
文章分类: 漏洞分析,应急响应,解决方案
工作流接口没登录就能执行命令:Orkes漏洞已遭利用
原创
tcode
tcode
字节脉搏实验室
2026年9月20日 10:33
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
一个本应编排微服务和后台任务的工作流平台,被提交一段看起来像正常流程定义的JSON后,却可能在服务器上执行系统命令。Orkes Conductor的CVE-2026-58138正是这一类问题:无需登录,攻击者就能通过工作流API提交内联脚本表达式。公开漏洞利用代码在8月出现,Empirical Security在8月21日观察到实际攻击,Fortinet随后发布了持续利用告警。
漏洞并不新。Orkes在6月发布3.30.2时已经修复,NVD把3.21.21至3.30.2之前的版本列为受影响范围。风险在于修复公告、资产发现和公网暴露检查之间常常存在时间差。只要旧实例仍能被外部或应用网络访问,攻击者就不需要账号,也不需要欺骗管理员点击链接。
时间线:从修复到大规模尝试
从公开材料能重建出一条清楚的利用曲线。6月,Orkes发布3.30.2,修复未经认证的工作流表达式执行问题。8月初,针对漏洞的PoC公开。8月21日,安全研究机构观察到在野攻击。到9月8日至9日,Fortinet在两天内拦截约1,300次利用尝试;其后续告警还给出24小时1,290次、7天6,696次等遥测数据。
这些数字说明扫描和攻击尝试显著增加,但不能直接换算成受害组织数量。被防火墙拦截的请求不等于成功执行,来源IP所在国家也不等于攻击者身份。公开数据给出的来源地区包括德国、香港、印度尼西亚、阿联酋和印度,但把这些地区写成攻击来源或归因,会超出证据边界。
真正需要警惕的是攻击门槛。PoC出现后,攻击者不必理解整个工作流平台,只要找到未鉴权的API端点并提交预先构造的表达式即可尝试执行。对暴露在互联网上的实例,这会把漏洞从“内部系统缺陷”变成持续扫描目标。
为什么默认信任变成了执行通道
Conductor允许用户定义INLINE、LAMBDA、DO_WHILE和SWITCH等任务类型,其中可以包含JavaScript或Python表达式。正常情况下,这些表达式用于流程判断和数据处理,但底层GraalVM上下文如果配置为HostAccess.ALL或allowAllAccess,就会允许脚本访问Java运行时,进而反射调用系统能力或直接启动子进程。
问题不在于“工作流支持脚本”本身,而在于脚本执行边界没有被严格限制。攻击者可以把恶意表达式放进正常JSON结构,绕过只检查字段名称或流程格式的防护。服务端随后用Conductor进程的身份执行它。若服务以root运行,命令执行权限也随之为root;若它持有数据库、密钥管理或云API凭据,影响还会继续扩大。
开源版本默认没有强制认证,使预期中的“登录后使用”失效。很多团队把Conductor放在内网,认为反向代理、VPN或Kubernetes NetworkPolicy已经提供了保护。但如果代理没有鉴权,或者应用网络中的任意主机都能访问工作流API,未认证漏洞仍然可以从被攻陷的Web服务或开发机横向触发。
先封到达路径,再判断是否已被利用
如果资产表里存在Conductor,第一步不是慢慢研究PoC,而是确认版本和网络路径。查询实际运行版本,低于3.30.2的实例先在网络层限制工作流API,只保留明确需要的调用方,同时安排升级。对暴露到互联网的实例,优先封堵比“先观察一天”更合理,因为攻击尝试和业务请求可以通过日志区分。
第二步是查服务账号的行为。查看Conductor进程是否启动了shell、curl、wget、Python、Node.js等非预期子进程,核对启动参数、父进程、工作目录和网络连接。攻击者成功执行命令后,往往会下载脚本、探测云元数据、读取环境变量或建立反向连接。若主机安全产品只记录了Conductor主进程,而忽略它的子进程,这条证据会被漏掉。
第三步是审计工作流提交记录。关注包含INLINE、LAMBDA、DO_WHILE或SWITCH任务的异常定义,尤其是短时间内创建、立即启动、随后删除的流程。还要对比调用者是否正常、来源IP是否属于API网关、任务表达式中是否出现系统命令、文件读取或网络请求。版本升级不会自动给出这些历史证据,日志留存必须提前开启。
第四步是评估凭据影响。如果Conductor服务账号能够访问数据库、对象存储、CI/CD、Kubernetes API或云平台,就要假设这些凭据可能已被读取。仅清理工作流文件不够,应轮换服务账号密钥和令牌,检查Kubernetes ServiceAccount、云审计日志与数据库连接来源。具体范围由实际权限决定,不能只凭主机没发现木马就下结论。
升级本身也有配置要点。3.30.2或更高版本修复了漏洞,但仍应限制表达式执行能力,关闭不必要的allowAllAccess,把需要脚本的任务放到隔离执行环境,并给API增加强制鉴权。若当前架构依赖内网信任,就应该把“谁能直接访问工作流API”写进网络策略并定期验证,而不是只画在架构图上。
外部扫描数据不能替代内部证据
Fortinet拦截6,696次尝试,是一个有价值的趋势信号,它说明攻击者正在主动寻找这个漏洞。但它不能回答三个内部问题:自己的实例是否在攻击路径上,是否有请求越过边界,以及是否有命令成功执行。只有服务日志、工作流记录、进程树和网络连接能回答这些问题。
目前可以确认的边界同样要保留:漏洞影响3.21.21至3.30.2之前的版本;修复版本是3.30.2;公开PoC和攻击尝试存在;机构报告的地理来源不能用于归因。公开材料没有给出成功受害组织的数量和名称,因此不应把扫描尝试写成大规模失陷。
遇到这种未认证RCE,最实用的顺序是“先减少可到达实例,再查成功痕迹,最后再分析攻击者是谁”。如果先花时间归因,攻击窗口不会因此暂停。封住接口、升级版本、清理子进程和轮换凭据,才是能改变风险状态的动作。
检查工作流平台时,可以直接问负责人:“请列出3.30.2之前的所有实例、工作流API的实际可达来源,以及9月8日至9日Conductor进程产生的子进程和异常流程提交记录。”只有版本、网络和主机三类证据都能闭环,才能判断漏洞是“曾经暴露”还是“已经执行”。
热点来源
来源:FortiGuard Outbreak Alert:Orkes Conductor RCE,https://www.fortiguard.com/outbreak-alert/orkes-conductor-rce
来源:FortiGuard Threat Signal:Orkes Conductor Evaluator RCE,https://fortiguard.fortinet.com/threat-signal-report/6527
来源:NVD:CVE-2026-58138,https://nvd.nist.gov/vuln/detail/CVE-2026-58138
来源:Orkes Conductor修复版本:v3.30.2,https://github.com/conductor-oss/conductor/releases/tag/v3.30.2
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:字节脉搏实验室 tcode
tcode《工作流接口没登录就能执行命令:Orkes漏洞已遭利用》