Tóm tắt nhanh
- Soup Sieve có lỗ hổng ReDoS khi biên dịch một số CSS selector.
- Phiên bản pip:soupsieve 2.10 trở xuống bị ảnh hưởng; selector không đáng tin cậy có thể làm worker bị treo.
- Nâng cấp lên Soup Sieve 3.0.2 trở lên; không dùng bản 3.0.0 đã bị rút khỏi PyPI.
Soup Sieve: lỗ hổng ReDoS CVE-2026-126191 và cách nâng cấp an toàn
Soup Sieve mắc lỗi ReDoS khi biên dịch một số CSS selector, có thể khiến worker bị treo nếu ứng dụng xử lý selector do người dùng cung cấp. Phiên bản 2.10 trở xuống bị ảnh hưởng; hãy nâng cấp lên 3.0.2 trở lên, không dùng bản 3.0.0 đã bị rút khỏi PyPI.
Nội dung bài viết
GitHub Advisories công bố advisory GHSA-6655-6qjp-jx7x về lỗ hổng ReDoS CVE-2026-126191 trong Soup Sieve. Lỗi xảy ra khi biên dịch CSS selector và đáng lưu ý với ứng dụng xử lý selector do người dùng cung cấp.
Tổng quan và thông tin kỹ thuật
Soup Sieve là thư viện Python dùng để phân tích và chọn phần tử HTML bằng CSS selector, bao gồm cả trường hợp BeautifulSoup gọi thư viện qua .select(). Lỗ hổng nằm trong quá trình biên dịch selector.
| Thông tin | Chi tiết |
|---|---|
| CVE / GHSA | CVE-2026-126191 / GHSA-6655-6qjp-jx7x |
| CWE | CWE-1333 (Inefficient Regular Expression Complexity) |
| CVSS | 7.5 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) |
| Nguồn | GitHub Advisories |
Phạm vi ảnh hưởng
| Sản phẩm | Phiên bản ảnh hưởng | Phiên bản đã vá |
|---|---|---|
| pip:soupsieve | 2.10 trở xuống | 3.0.2 trở lên |
Rủi ro đáng chú ý khi ứng dụng biên dịch CSS selector không đáng tin cậy do người dùng cung cấp, chẳng hạn dịch vụ web scraping hoặc công cụ cho phép người dùng định nghĩa quy tắc trích xuất.
Cơ chế và tác động
Regex IDENTIFIER/CSS_ESCAPES trong css_parser.py:119-124 có thể backtrack theo cấp số nhân khi biên dịch selector hợp lệ chứa chuỗi digit-escape mơ hồ như \9 ở vị trí tên thuộc tính hoặc thẻ. Lỗi xảy ra trước khi kiểm tra SELECTOR_LIMIT; selector khoảng 60 byte có thể làm worker bị treo, gây từ chối dịch vụ.
Việc kích hoạt có thể xảy ra qua soupsieve.compile() hoặc BeautifulSoup .select(), nếu ứng dụng đưa selector do người dùng cung cấp vào quá trình biên dịch.
Kiểm tra hệ thống
Kiểm tra phiên bản Soup Sieve đang cài trong môi trường Python:
python -m pip show soupsievePhiên bản 3.0.2 trở lên đã bao gồm bản vá; phiên bản 2.10 trở xuống cần nâng cấp.
Khắc phục và giảm thiểu
Nâng cấp gói
pip:soupsievelên phiên bản 3.0.2 trở lên, ưu tiên các ứng dụng biên dịch CSS selector không đáng tin cậy.Không dùng phiên bản 3.0.0 để nâng cấp: bản này đã sửa lỗi nhưng bị rút khỏi PyPI.
Sau khi nâng cấp, chạy lại lệnh kiểm tra phiên bản và xác nhận gói đã cài là 3.0.2 trở lên.