LeRobot 취약점, 인증 없는 RCE로 로봇 서버 노린다

Hugging Face의 오픈소스 로봇 프레임워크 LeRobot에서 심각한 원격 코드 실행 취약점이 발견됐다. 서비스 포트에 접근할 수 있는 공격자라면 사용자 이름, 비밀번호, 인증서 없이도 해당 머신을 장악할 수 있다. 취약점 번호는 CVE-2026-25874다.

취약점이 있는 지점

LeRobot은 보통 학습된 정책 모델을 GPU 서버에서 실행하고, 앞단의 로봇이 gRPC PolicyServer를 호출해 동작 지시를 받는 구조를 쓴다. 이 설계 자체가 문제는 아니다. 위험한 부분은 통신 계층에서 외부 입력에 Python의 pickle.loads()를 사용한다는 점이다.

pickle은 JSON이나 protobuf처럼 수동적인 데이터 형식이 아니다. 역직렬화 과정에서 임의의 Python 객체를 재구성하고 로직을 실행할 수 있다. 이번에 영향을 받는 RPC 핸들러는 SendPolicyInstructions()SendObservations()이며, 둘 다 원시 바이트를 받아 타입 검증 없이 pickle에 넘긴다.

따라서 os.system() 호출을 심은 payload를 보내면 서버가 역직렬화하는 순간 명령이 실행될 수 있다. 더 나쁜 점은 PolicyServer가 기본적으로 add_insecure_port()로 시작된다는 것이다. TLS도 인증도 없으므로, 내부망에 있더라도 네트워크로 닿기만 하면 공격 가능하다.

로봇 스택에서는 피해가 커진다

확인된 영향 버전은 PyPI에 공개된 LeRobot v0.4.3이다. 같은 비동기 추론 아키텍처를 쓰는 이전 버전도 노출됐을 가능성이 크다. LeRobot은 GitHub에서 2만1500개가 넘는 star를 받은 대표적인 오픈소스 로봇 프로젝트이며, 보도 시점에는 공식 수정 버전이 아직 나오지 않았다.

PolicyServer 침해는 평범한 앱 서버 침해와 다르다. 이런 시스템은 GPU 서버에서 높은 권한으로 실행되는 경우가 많고, 데이터셋과 모델 가중치가 같은 장비에 있으며, 물리적 로봇 하드웨어와 직접 연결된다. 생산라인이나 의료 로봇이라면 데이터 보안을 넘어 물리적 안전 문제로 번질 수 있다.

지금 필요한 조치

연구진은 pickle을 JSON, protobuf 네이티브 필드 또는 Hugging Face의 safetensors로 바꾸고, secure gRPC port로 TLS를 켜며, 서비스를 사설 인터페이스에 묶고, 포트를 방화벽으로 차단하고, 실제 패치가 나오기 전까지 PolicyServer 노출을 중단하라고 권고한다. 다만 이는 완화책이며, 근본적인 해결은 Hugging Face의 수정 버전에 달려 있다.

이번 사건은 과거 PyTorch 모델 파일 취약점을 떠올리게 한다. 머신러닝 커뮤니티는 빠르고 편하다는 이유로 pickle을 오래 써 왔다. 하지만 모델 파일, 정책 지시, 관측 채널이 외부 입력을 받기 시작하면 그 편의성은 곧 코드 실행 표면이 된다.

출처: CocoLoop, CVE-2026-25874: Hugging Face LeRobot Unauthenticated RCE via Pickle Deserialization (Resecurity); Critical CVE-2026-25874 Leaves Hugging Face LeRobot Open to Unauthenticated RCE (The Hacker News)