CVE-2026-42511: FreeBSD의 dhclient에서 21년 된 루트 RCE

FreeBSD는 오랫동안 넷플릭스, 소니와 같은 대기업 및 다양한 네트워킹 하드웨어 업체들의 핵심 인프라를 구동하는 가장 안전한 운영 체제 중 하나로 명성을 유지해 왔습니다. 그러나 최근 발견된 취약점 CVE-2026-42511은 20년 넘게 존재해 온 심각한 보안 결함을 드러냈습니다.

AISLE에 의해 발견된 이 취약점은 루트 권한으로 원격 명령 실행(RCE)을 가능하게 합니다. 이 결함은 동일 로컬 네트워크에 있는 어떤 시스템에서도 “웜”으로 전파될 수 있어, 표준 네트워크 구성 과정을 전체 시스템 침해의 경로로 바꾸는 점에서 특히 위험합니다.

문제의 근원: 20년 된 유산

dhclient(FreeBSD의 DHCP 클라이언트)에 이 취약점이 존재합니다. 이 결함은 2005년 FreeBSD-6.0 릴리스 시점에 dhclient 구현이 OpenBSD에서 가져와진 당시 도입되었습니다. OpenBSD는 2012년에 문제의 dhclient-script를 폐기하여 사실상 위협을 무력화했지만, 해당 코드는 FreeBSD에 남아 있어 지금까지 잠복하고 있었고 아직까지도 발견되지 않았습니다.

핵심적으로 CVE-2026-42511은 공격자가 제어하는 프로토콜 데이터에 대한 부적절한 정제 부족으로 인한 논리적 결함입니다. 이 데이터는 신뢰된 구성 파일에 저장된 뒤, 특권 실행 경로에서 다시 해석됩니다.

기술적 분석: 패킷에서 루트까지

1. 오염된 임대 파일

dhclient가 DHCP 응답을 받으면 임대 정보를 로컬 파일(보통 /var/db/dhclient.leases.<if>)에 기록합니다. 이를 담당하는 함수 write_client_lease()fprintf를 사용해 데이터를 직렬화합니다. 대부분의 필드는 정제되거나 유효한 IP 주소로 제한되지만, 부트스트랩 프로토콜(BOOTP)에서 온 두 개의 특정 필드는 그대로 기록됩니다:

  • lease->filename
  • lease->server_name

이 필드들은 이스케이프되지 않기 때문에 공격자는 큰따옴표, 개행, 세미콜론 등을 삽입할 수 있습니다. 예를 들어, 악성 DHCP 서버는 file 필드에 ";\n medium ";id>/tmp/pwned와 같은 값을 보낼 수 있습니다.

dhclient가 이를 임대 파일에 기록하면 filename 문자열을 탈출하고 새로운 medium 지시자를 삽입합니다. 결과적인 임대 파일은 구문적으로는 유효하지만 악성 페이로드를 포함하게 됩니다:

lease {
  interface "em1";
  fixed-address 192.168.100.50;
  next-server 192.168.100.2;
  filename "";
  medium ";id>/tmp/pwned";
}

2. 특권 실행 싱크

공격의 두 번째 단계는 dhclient가 네트워크 구성을 적용하기 위해 /sbin/dhclient-script를 호출할 때 발생합니다. 이 스크립트는 루트 권한으로 실행되며 위험한 eval 구문을 포함하고 있습니다:

eval "$IFCONFIG $interface $medium"

오염된 임대 파일이 임대 갱신이나 시스템 재시작 시 재해석될 때, 삽입된 medium 값이 이 eval 싱크에 전달됩니다. 시스템이 실행하는 최종 명령은 다음과 같습니다:

eval "/sbin/ifconfig -n em1 ;id>/tmp/pwned"

이로 인해 id > /tmp/pwned(또는 다른 임의의 명령) 가 전체 루트 권한으로 실행됩니다.

공격 표면

이 취약점은 동일 브로드캐스트 도메인에서 DHCP 서버를 운영하거나 스푸핑할 수 있는 모든 공격자에게 매우 쉽게 접근 가능합니다. 포함되는 경우:

  • Wired Networks: 동일 로컬 네트워크 구간에 있는 악성 장치.
  • Wireless Networks: 악성 Wi‑Fi 액세스 포인트 또는 DHCP 트래픽을 주입할 수 있는 동일 Wi‑Fi 네트워크상의 공격자.

FreeBSD가 노트북 지원 및 Wi‑Fi 호환성에 중점을 두면서, 커피숍이나 공항과 같은 공공 장소에서 신뢰할 수 없는 네트워크에 연결하는 사용자의 위험이 증가하고 있습니다.

커뮤니티 관점 및 비판

이 발견은 FreeBSD 네트워킹 스택의 아키텍처 선택에 대한 논의를 촉발했습니다. 일부 관찰자들은 중요한 네트워크 프로토콜에 대해 JSON, TOML, SQLite와 같은 구조화된 형식 대신 임시 파일 직렬화를 사용하고, 데이터 경로에 쉘 eval 호출을 배치하는 것이 근본적으로 위험한 설계 패턴이라고 지적했습니다.

"데이터 경로에 쉘 기능을 두는 것은… 특히 DHCP와 같이 중요한 경우에 부적절한 선택처럼 보입니다. 그곳에 쉘 eval을 사용하는 것이 적절하다고 여기는 것은 시스템 전체에 부정적인 인상을 주는 매우 나쁜 선택입니다."

공격 체인의 요약

  1. Injection: 악성 DHCP 서버가 조작된 BOOTP file 필드를 전송합니다.
  2. Persistence: dhclient가 이 이스케이프되지 않은 문자열을 임대 데이터베이스에 기록합니다.
  3. Reparsing: 시스템이 나중에 오염된 임대 파일을 읽어, 삽입된 medium 지시자를 신뢰된 상태로 취급합니다.
  4. Execution: dhclient가 악성 medium 값을 /sbin/dhclient-script에 전달합니다.
  5. Compromise: 스크립트의 eval 명령이 공격자의 페이로드를 루트 권한으로 실행합니다.

결론

CVE-2026-42511은 레거시 코드가 수십 년 동안도 심각한 취약점을 내포할 수 있음을, 보안이 뛰어난 시스템에서도 경고합니다. 이스케이프되지 않은 직렬화와 특권 eval 싱크의 조합은 루트 접근을 위한 사소한 경로를 만들었습니다. FreeBSD는 이후 FreeBSD-SA-26:12.dhclient 권고안에서 패치를 배포했으며, 사용자는 즉시 시스템을 업데이트할 것을 강력히 권장합니다.

Sources