🇰🇷 한글 설명
LangChain 프레임워크의 역직렬화 취약점으로, 과도하게 넓은 객체 allowlist를 사용하여 신뢰할 수 없는 LangChain 직렬화 객체가 로드될 수 있습니다. 공격자가 조작된 생성자 딕셔너리를 전송하면 신뢰할 수 없는 인자로 클래스가 인스턴스화되어 임의의 코드 실행으로 이어질 수 있습니다.
💡 쉬운 설명
LangChain이 외부에서 받은 데이터를 검증 없이 실행 가능한 코드로 변환합니다. 공격자가 조작된 데이터를 보내면 예상치 못한 위험한 코드가 실행될 수 있습니다.
🇺🇸 원문 (English)
LangChain is a framework for building agents and LLM-powered applications. Prior to 0.3.85 and 1.3.3, LangChain contains older runtime code paths that deserialize run inputs, run outputs, or other application-controlled payloads using overly broad object allowlists. These paths may call load() with allowed_objects="all". This does not enable arbitrary Python object deserialization, but it does allow any trusted LangChain-serializable object to be revived, which is broader than these runtime paths require. As a result, attacker-supplied LangChain serialized constructor dictionaries may cause trusted runtime paths to instantiate classes with untrusted constructor arguments. This vulnerability is fixed in 0.3.85 and 1.3.3.
📍 영향받는 시스템
LangChain 0.3.85 미만 및 1.3.3 미만 버전 모두
⚔️ 공격 벡터
LangChain 직렬화 형식의 조작된 생성자 딕셔너리를 application-controlled payload로 주입
🛡️ 대응 방법
LangChain을 0.3.85 이상 또는 1.3.3 이상으로 즉시 업그레이드
🔧 검증 코드
명령어가 버전을 반환하면 그 버전이 0.3.85 미만 또는 1.3.3 미만인지 확인하여 취약 여부 판단
python -c "import langchain; print(langchain.__version__)" 2>/dev/null | grep -E '^[0-3]\.[0-2]\.[0-9]+|^0\.3\.[0-8][0-9]|^1\.[0-3]\.0|^1\.3\.[0-2]'