Wikimedia/svgtranslate 2.0.1 远程代码执行

admin 2024年6月17日08:20:40评论17 views字数 1993阅读6分38秒阅读模式

Wikimedia/svgtranslate 2.0.1 远程代码执行

系统概述

SVGTranslate由维基媒体开发,将SVG文件转换为PNG图像,同时允许在SVG内容中进行基于语言的文本替换。此 PHP 后端应用程序的结构通过 ApiController.php 和 Renderer.php 管理功能。源代码托管在 SVGTranslate 的 GitHub 存储库中。

组件路径

  • API 控制器: /src/Controller/ApiController.php

  • 渲染服务: /src/Service/Renderer.php

漏洞描述 

由于 PNG 生成过程中语言参数处理不当,应用程序容易受到未经身份验证的远程代码执行 (RCE) 的影响。该漏洞源于在渲染服务中构建和执行 shell 命令的方式。

漏洞分析

切入点

定义如下的 API 端点处理文件名和语言参数以提供 PNG 文件,而无需对 lang 参数进行充分验证:

/** * Serve a PNG rendering of the given SVG in the given language. * @Route("/api/file/{filename}/{lang}.png", name="api_file", methods="GET") * @param string $filename * @param string $lang * @return Response */public function getFile(string $filename, string $lang): Response{    $filename = Title::normalize($filename);    $content = $this->svgRenderer->render($this->cache->getPath($filename), $lang);    return new Response($content, 200, ['Content-Type' => 'image/png', 'X-File-Hash' => sha1($content)]);}

渲染器漏洞

在 中 Renderer.php , lang 该参数不安全地包含在 shell 命令中,允许命令注入:

/** * Render a SVG file to PNG. * @param string $file Full filesystem path to the SVG file to render. * @param string $lang Language code for rendering. * @param string $outFile File path for the output PNG. * @throws ProcessFailedException If conversion fails. * @return string The PNG image contents. */public function render(string $file, string $lang, ?string $outFile = null) : string{    $command = $this->rsvgCommand.' "$SVG"';    if ('fallback' !== $lang) {        $command .= " --accept-language=$lang";    }    if ($outFile) {        $command .= ' > "$PNG"';    }    $process = Process::fromShellCommandline($command);    $process->mustRun(null, ['SVG' => $file, 'PNG' => $outFile]);    return $process->getOutput();}

概念验证

该漏洞直接在维基媒体实例上进行了测试,演示了未经授权的命令执行,如服务器响应中的系统用户信息所示:

GET /api/file/SI_base_unit1.svg/fr;id;.png HTTP/2Host: svgtranslate.toolforge.org

Wikimedia/svgtranslate 2.0.1 远程代码执行

  • 漏洞报告日期:2024 年 5 月 22 日

  • 漏洞修补:2024 年 5 月 23 日

https://github.com/wikimedia/svgtranslate/commit/cc0aef7b2c6ba7205329b93fb95f0bdceaa89d1c

  • 漏洞暴露:自 2024 年 2 月起

缓解建议

输入验证:对所有输入参数实施严格的验证,尤其是那些合并到命令行操作中的输入参数。

安全命令执行:使用数组参数执行命令,确保命令和参数分离,防止注入。

安全审计和测试:进行彻底的安全审查和渗透测试,以识别和修复潜在的漏洞。

Wikimedia/svgtranslate 2.0.1 Remote Code Executionhttps://chocapikk.com/posts/2024/svgtranslate/

原文始发于微信公众号(Ots安全):Wikimedia/svgtranslate 2.0.1 远程代码执行

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月17日08:20:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Wikimedia/svgtranslate 2.0.1 远程代码执行http://cn-sec.com/archives/2850113.html

发表评论

匿名网友 填写信息