15/11/2026

Soup Sieve: lỗ hổng ReDoS CVE-2026-126191 và cách nâng cấp an toàn

CVE-2026-126191

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.

Soup Sieve: lỗ hổng ReDoS CVE-2026-126191 và cách nâng cấp an toàn

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.
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 tinChi tiết
CVE / GHSACVE-2026-126191 / GHSA-6655-6qjp-jx7x
CWECWE-1333 (Inefficient Regular Expression Complexity)
CVSS7.5 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
NguồnGitHub Advisories

Phạm vi ảnh hưởng

Sản phẩmPhiên bản ảnh hưởngPhiên bản đã vá
pip:soupsieve2.10 trở xuống3.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

  1. Kiểm tra phiên bản Soup Sieve đang cài trong môi trường Python:

    python -m pip show soupsieve

    Phiê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

  1. Nâng cấp gói pip:soupsieve lê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.

  2. 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.

  3. 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.

Bài viết liên quan