Ràng buộc HMAC không đầy đủ trong Symfony UX LiveComponent cho phép phát lại trạng thái giữa các component

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-49212 là gì?

Lỗ hổng CVE-2026-49212 là lỗ hổng Insufficient Verification of Data Authenticity ảnh hưởng tới ux (phiên bản bị ảnh hưởng: >= 3.0.0, < 3.1.0 và < 2.36.0). Lỗ hổng này được xếp hạng ở mức Trung bình, với điểm CVSS 6.9. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

Symfony UX là một hệ sinh thái JavaScript dành cho Symfony. Từ 2.8.0 cho đến 2.36.0 và 3.1.0, HMAC được tính bởi Symfony\UX\LiveComponent\LiveComponentHydrator chỉ bao phủ các cặp khóa/giá trị prop đã được sắp xếp và không bao gồm tên component, định danh slot (props so với propsFromParent) hoặc ngữ cảnh request, cho phép một blob đã ký được tạo cho một component hoặc slot được phát lại ở component hoặc slot khác và thiết lập một read-only prop trên component đích. Vấn đề này đã được khắc phục trong các phiên bản 2.36.0 và 3.1.0.

Sản phẩm và phạm vi ảnh hưởng

Package bị ảnh hưởng là symfony/ux-live-component trong Symfony UX:

  • Nhánh 2.x: các phiên bản từ 2.8.0 đến trước 2.36.0 bị ảnh hưởng.
  • Nhánh 3.x: các phiên bản từ 3.0.0 đến trước 3.1.0 bị ảnh hưởng.
  • Bản sửa được advisory xác nhận là 2.36.0 cho nhánh 2.x và 3.1.0 cho nhánh 3.x.

Trạng thái của các nhánh hoặc phiên bản nằm ngoài các phạm vi được nêu trên không được suy luận từ advisory này.

Chi tiết kỹ thuật

Symfony UX LiveComponent bảo vệ các prop chỉ đọc bằng HMAC khi trạng thái component được gửi đến trình duyệt rồi gửi trở lại máy chủ. Trong Symfony\UX\LiveComponent\LiveComponentHydrator, dữ liệu dùng để tính HMAC trước đây chỉ gồm các cặp khóa/giá trị prop đã được sắp xếp. HMAC không bao gồm tên component, định danh slot props hoặc propsFromParent, và ngữ cảnh request; cùng một secret ở cấp ứng dụng được dùng cho mọi component.

Lỗi này cho phép một blob đã ký do máy chủ tạo cho component này được phát lại cho component khác nếu các tên khóa phù hợp, hoặc chuyển đổi giữa hai slot. Kẻ tấn công có thể dùng giá trị từng hợp lệ dưới dạng writable prop ở component này để đặt một read-only prop trên component đích. Điều kiện thực tế phụ thuộc vào ứng dụng có sử dụng các component, prop và slot bị ảnh hưởng hay không; chi tiết về request context không được đưa vào cơ chế sửa lỗi được mô tả trong advisory.

Khả năng khai thác

Lỗ hổng có thể bị khai thác qua mạng. Thông tin đặc tính tấn công trong bản ghi mô tả việc khai thác không cần xác thực và không cần tương tác của người dùng, với độ phức tạp thấp.

Ở mức khái quát, kẻ tấn công cần có một signed blob do máy chủ phát hành và một component hoặc slot đích phù hợp để replay. Không nên coi đây là hướng dẫn khai thác đầy đủ, vì advisory không công bố payload, endpoint hay chuỗi request cụ thể.

Bản ghi được cung cấp không xác lập rằng lỗ hổng đã bị khai thác trong thực tế hoặc có public exploit. Advisory đã kiểm tra cũng không mô tả một chiến dịch, nạn nhân hay chỉ báo xâm nhập cụ thể.

Tác động kỹ thuật

Lỗi cho phép signed blob hợp lệ trong một ngữ cảnh được sử dụng lại trong ngữ cảnh khác, làm suy yếu việc xác minh nguồn gốc và phạm vi của dữ liệu. Kết quả kỹ thuật là một read-only prop trên component đích có thể nhận giá trị mà người gửi chỉ được phép chọn ở một component khác.

Ảnh hưởng bị giới hạn vào các component và slot có dữ liệu phù hợp cho việc replay. Tác động tổ chức có thể bao gồm thay đổi trạng thái hoặc quyết định nghiệp vụ nếu ứng dụng dựa vào prop đó để thực thi logic, nhưng advisory không xác định một hậu quả nghiệp vụ cụ thể. Bản ghi không cho thấy tác động đến tính bảo mật hoặc tính sẵn sàng của dữ liệu hay dịch vụ.

Tác động đến tổ chức

  • Rủi ro toàn vẹn: Máy chủ có thể chấp nhận giá trị do kẻ tấn công lựa chọn cho một prop được ứng dụng coi là chỉ đọc.
  • Nếu prop đó ảnh hưởng đến quyết định nghiệp vụ, trạng thái phiên hoặc quy trình xử lý, dữ liệu hoặc hành vi nghiệp vụ có thể bị thay đổi ngoài ý muốn. Mức độ ảnh hưởng cụ thể phụ thuộc vào cách ứng dụng sử dụng prop bị tác động.
  • Bản ghi không xác định việc lộ dữ liệu hoặc làm gián đoạn dịch vụ. Rủi ro chính là sự tin cậy sai lệch vào tính toàn vẹn của trạng thái component.

Cách khắc phục

  1. Nâng symfony/ux-live-component lên 2.36.0 nếu ứng dụng đang ở nhánh 2.x, hoặc lên 3.1.0 nếu ứng dụng đang ở nhánh 3.x. Chọn đúng bản sửa theo nhánh đang triển khai và xác minh lại dependency lockfile.
  2. Sau khi nâng cấp, yêu cầu tải lại các trang còn giữ payload được ký trước khi nâng cấp. Changelog của bản sửa lưu ý rằng payload cũ có thể không còn hợp lệ sau khi cách tính checksum thay đổi.
  3. Kiểm tra các component có read-only prop và child component dùng propsFromParent để xác định các luồng nghiệp vụ cần xác minh sau nâng cấp.
  4. Advisory được kiểm tra chỉ mô tả bản vá, không cung cấp một biện pháp giảm nhẹ thay thế. Không nên tự coi việc đổi tên prop hoặc ẩn endpoint là thay thế cho nâng cấp.

Cách phát hiện

  1. Kiểm kê dependency Composer và xác định phiên bản của package symfony/ux-live-component trong từng ứng dụng, container hoặc artifact triển khai.
  2. Rà soát mã nguồn để tìm LiveComponentHydrator, các prop #[LiveProp] chỉ đọc và việc truyền blob propsFromParent cho child component.
  3. Xác định các ứng dụng có component nhận dữ liệu đã ký từ trình duyệt, sau đó ưu tiên kiểm tra các component có tên khóa prop trùng hoặc tương tự giữa nhiều component.
  4. Không có IOC hoặc mẫu log chuyên biệt được advisory công bố. Có thể rà soát telemetry ứng dụng hiện có để tìm hành vi replay bất thường hoặc lỗi xác minh hydration, nhưng việc không thấy log không chứng minh hệ thống an toàn.
Nguồn (19)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.

Khám phá các giải pháp khác liên quan