Một lỗ hổng bảo mật nghiêm trọng đã được công bố trong LangChain Core, cho phép kẻ tấn công đánh cắp các bí mật nhạy cảm và thậm chí tác động đến phản hồi của các mô hình ngôn ngữ lớn (LLM) thông qua prompt injection.
LangChain Core (tức langchain-core) là một gói Python cốt lõi thuộc hệ sinh thái LangChain, cung cấp các giao diện và trừu tượng độc lập với mô hình để xây dựng các ứng dụng được hỗ trợ bởi LLM.
Lỗ hổng này, được theo dõi với mã CVE-2025-68664, có điểm CVSS là 9.3 trên 10.0. Nhà nghiên cứu bảo mật Yarden Porat được ghi nhận là người đã báo cáo lỗ hổng vào ngày 4 tháng 12 năm 2025. Nó được đặt tên mã là LangGrinch.
"Một lỗ hổng serialization injection tồn tại trong các hàm dumps() và dumpd() của LangChain," các nhà phát triển dự án cho biết trong một thông báo. "Các hàm này không thoát các từ điển chứa khóa 'lc' khi serialize các từ điển tự do."
"Khóa 'lc' được LangChain sử dụng nội bộ để đánh dấu các đối tượng được serialized. Khi dữ liệu do người dùng kiểm soát chứa cấu trúc khóa này, nó sẽ được xử lý như một đối tượng LangChain hợp lệ trong quá trình deserialization thay vì dữ liệu người dùng thông thường."
Theo nhà nghiên cứu Porat của Cyata, cốt lõi của vấn đề là do hai hàm này không thoát được các từ điển do người dùng kiểm soát có chứa khóa "lc". Dấu hiệu "lc" đại diện cho các đối tượng LangChain trong định dạng serialization nội bộ của framework.
"Do đó, một khi kẻ tấn công có thể khiến một vòng lặp điều phối của LangChain serialize và sau đó deserialize nội dung bao gồm một khóa 'lc', chúng sẽ tạo ra một đối tượng tùy ý không an toàn, có khả năng kích hoạt nhiều đường dẫn có lợi cho kẻ tấn công," Porat cho biết.
Điều này có thể dẫn đến nhiều kết quả khác nhau, bao gồm secret extraction từ các biến môi trường khi deserialization được thực hiện với "secrets_from_env=True" (trước đây được đặt mặc định), khởi tạo các lớp trong các namespace đáng tin cậy đã được phê duyệt trước, chẳng hạn như langchain_core, langchain và langchain_community, và thậm chí có khả năng dẫn đến arbitrary code execution thông qua Jinja2 templates.
Hơn nữa, lỗi thoát ký tự cho phép injection cấu trúc đối tượng LangChain thông qua các trường do người dùng kiểm soát như metadata, additional_kwargs hoặc response_metadata thông qua prompt injection.
Bản vá được LangChain phát hành giới thiệu các cài đặt mặc định hạn chế mới trong các hàm load() và loads() bằng cách sử dụng một tham số allowlist "allowed_objects" cho phép người dùng chỉ định các lớp nào có thể được serialized/deserialized. Ngoài ra, Jinja2 templates bị chặn mặc định, và tùy chọn "secrets_from_env" hiện được đặt thành "False" để vô hiệu hóa việc tự động tải bí mật từ môi trường.
Các phiên bản sau của langchain-core bị ảnh hưởng bởi CVE-2025-68664:
- >= 1.0.0, < 1.2.5 (Đã khắc phục trong 1.2.5)
- < 0.3.81 (Đã khắc phục trong 0.3.81)
Đáng chú ý là có một lỗ hổng serialization injection tương tự trong LangChain.js cũng xuất phát từ việc không thoát đúng cách các đối tượng có khóa "lc", từ đó cho phép secret extraction và prompt injection. Lỗ hổng này đã được gán mã định danh CVE-2025-68665 (điểm CVSS: 8.6).
Nó ảnh hưởng đến các gói npm sau:
- @langchain/core >= 1.0.0, < 1.1.8 (Đã khắc phục trong 1.1.8)
- @langchain/core < 0.3.80 (Đã khắc phục trong 0.3.80)
- langchain >= 1.0.0, < 1.2.3 (Đã khắc phục trong 1.2.3)
- langchain < 0.3.37 (Đã khắc phục trong 0.3.37)
Trước mức độ nghiêm trọng của lỗ hổng, người dùng được khuyến nghị cập nhật lên phiên bản đã vá càng sớm càng tốt để được bảo vệ tối ưu.
"Vector tấn công phổ biến nhất là thông qua các trường phản hồi của LLM như additional_kwargs hoặc response_metadata, những trường này có thể được kiểm soát thông qua prompt injection và sau đó được serialized/deserialized trong các hoạt động streaming," Porat nói. "Đây chính xác là loại giao thoa 'AI gặp bảo mật cổ điển' mà các tổ chức thường bị bất ngờ. Đầu ra của LLM là một input không đáng tin cậy."