# Open5GS s11-handler.c 断言漏洞
## 概述
Open5GS 在 2.7.6 及之前版本中存在一个漏洞,位于文件 `/src/sgwc/s11-handler.c` 的函数 `sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request` 中,可导致可达断言(reachable assertion)。
## 影响版本
Open5GS 2.7.6 及之前版本。
## 细节
攻击者可通过远程操纵触发 `sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request` 函数中的断言,造成异常终止或潜在服务不可用。
## 影响
远程攻击者可利用此漏洞执行攻击,导致进程崩溃或拒绝服务。该漏洞已被公开披露,并存在可利用代码。当前问题已被修复。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: [Bug]: SGW-C crashes on S11 CreateIndirectDataForwardingTunnelRequest with invalid EBI (ogs_assert(bearer) in sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request) · Issue #4231 · open5gs/open5gs -- 🔗来源链接
标签:exploitissue-tracking
神龙速读:
## 关键漏洞信息
- **漏洞描述:**
- **问题:** SGW-C在收到带有无效EBI(EPS Bearer ID)的CreateIndirectDataForwardingTunnelRequest时崩溃。
- **影响:** 由于SGW-C在控制面链路上使用了`ogs_assert(bearer)`,当接收到无效EBI时,会导致控制面DOA(Denial of Operation Avalanche)。
- **Open5GS版本:**
- v2.7.6
- **复现步骤:**
- 使用提供的Go语言代码模拟发送带有无效EBI的GTPv2-C CreateIndirectDataForwardingTunnelRequest。
- 运行程序并观察SGW-C是否崩溃。
- **日志:**
- 提供了详细的操作日志,包含了启动Open5GS、创建会话请求、发送带有无效EBI的请求以及最终触发的崩溃信息。
- 最终日志显示SGW-C triggered PB3-003触发了无效EBI的断言失败。
- **预期行为:**
- SGW-C应该验证CreateIndirectDataForwardingTunnelRequest中的EBI,并处理无效或不存在的EBI,而不是通过断言触发崩溃。
- **已观察行为:**
- 当使用无效EBI时,SGW-C直接崩溃,导致服务中断。
- **其他信息:**
- 问题状态已关闭,标注为`status:already-fixed`,说明该问题已在后续版本中修复。
- 涉及的文件和代码位置为`sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request`。
- 提供了详细的源代码段落和崩溃日志输出。
```markdown
### 总结
此漏洞展示了控制面协议处理中的一个安全缺陷,可能导致SGW-C在处理带有无效EBI的GTPv2-C请求时崩溃。通过适当的验证和错误处理可以避免此类问题的发生。后续版本中应确保对非法输入进行妥善处理,以防止服务中断。
标题: [Bug]: SGW-C crashes on S11 CreateIndirectDataForwardingTunnelRequest with invalid EBI (ogs_assert(bearer) in sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request) · Issue #4231 · open5gs/open5gs -- 🔗来源链接
标签:issue-tracking
神龙速读:
## 关键信息总结
### 漏洞描述
- **漏洞类型**: 缓存崩溃
- **影响组件**: SGW-C
- **触发条件**: 在 S11 接口上接收到带有无效 EBI 的 `CreateIndirectDataForwardingTunnelRequest` 消息时触发。
- **风险**: SGW-C 不能正确处理无效的 EBI,导致 `ogs_assert()` 断言失败并崩溃。
### 复现步骤
1. **环境准备**: 使用 Go 语言和相关库创建一个新的项目。
2. **代码编写**: 使用附带的 Go 代码构建一个特殊的 GTPv2-C 请求,该请求包含一个不存在的 EBI。
3. **运行程序**: 执行 Go 程序,向 SGW-C 发送构造的请求。
4. **观察结果**: SGW-C 遇到无效的 EBI 后触发断言失败并崩溃。
### 日志信息
- **崩溃日志**: `backtrace() returned 8 addresses`.
- **崩溃原因**: 调用 `ogs_assert(bearer)` 失败,原因是 `bearer` 为 `NULL`。
### 预期行为
- SGW-C 应该能够验证 EBI 的有效性,并在遇到无效的 EBI 时返回一个适当的 GTPv2 错误响应,而不是崩溃。
### 版本信息
- **受影响版本**: Open5GS v2.7.6
### 标签
- `status:already-fixed`
### 状态
- **当前状态**: Closed
标题: Submit #728987: Open5GS SGWC v2.7.6 Denial of Service -- 🔗来源链接
标签:third-party-advisory
神龙速读:
### 漏洞关键信息
- **漏洞提交号**: #728987
- **漏洞标题**: Open5GS SGWC v2.7.6 Denial of Service
- **受影响产品版本**: Open5GS SGWC v2.7.6
- **漏洞描述**:
- SGW-C 可以通过在 S11 上发送一个带有无效 EPS 承载 ID(EBI)的 GTPv2-C 创建间接数据转发隧道请求来强制中止,该 EBI 不对应会话中的任何现有承载。
- **复现步骤**:
1. 创建一个新的 go 项目文件夹,执行 `go mod init poc`。
2. 创建一个 `main.go` 并粘贴以下代码。
### 代码摘要(示例)
```go
package main
import (
"flag"
"fmt"
"log"
"math/rand"
"net"
"os"
"strings"
"sync/atomic"
"time"
"github.com/wmnsk/go-gtp/gtpv2"
"github.com/wmnsk/go-gtp/gtpv2/ie"
"github.com/wmnsk/go-gtp/gtpv2/path"
)
```
### 备注
该网页详细描述了漏洞及复现步骤,重点关注 Open5GS SGWC 版本 v2.7.6 中的拒绝服务漏洞。
暂无评论