Nỗ lực tính toán PBKDF2 không đủ trong danielberkompas cloak và cloak_ecto

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-94206 là gì?

Lỗ hổng CVE-2026-94206 là lỗ hổng Use of Password Hash With Insufficient Computational Effort ảnh hưởng tới cloak_ecto (phiên bản bị ảnh hưởng: 1.0.0-alpha.0 và a8fa1642b02f1c445a1ee8794c9095eb0921f8f3) và cloak (phiên bản bị ảnh hưởng: 0.7.0 – < 1.0.0-alpha.0 và 8699e6417a162c39d9f0ef63511bd23d3f38d1d2 – < 681c9702b7cd9afe0e5a840751ab009f550c69a9). Lỗ hổng này được xếp hạng ở mức Trung bình, với điểm CVSS 6.3. Lỗ hổng này đã có mã hoặc bằng chứng khai thác công khai, nhưng điều đó chưa xác nhận việc khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

Lỗ hổng sử dụng hàm băm mật khẩu với nỗ lực tính toán không đủ trong danielberkompas cloak_ecto và danielberkompas cloak cho phép kẻ tấn công sở hữu các giá trị đã băm và secret được cấu hình brute-force các plaintext có entropy thấp nhanh hơn nhiều so với cấu hình. Callback dump/1 mà Cloak.Ecto.PBKDF2 (Cloak.Fields.PBKDF2 trong cloak trước khi mã Ecto được chuyển sang cloak_ecto) đưa vào một field module gọi:pbkdf2.pbkdf2/4 với config[:size] ở vị trí số vòng lặp. Thiết lập:iterations được kiểm tra nhưng không bao giờ được sử dụng. Với giá trị mặc định của cloak_ecto (iterations: 600_000, size: 32), mỗi hash chỉ chạy 32 vòng PBKDF2 thay vì 600,000, vì vậy việc đoán ngoại tuyến các giá trị như địa chỉ email tốn chi phí thấp hơn khoảng 18,750 lần so với cấu hình. Vấn đề này ảnh hưởng đến cloak_ecto: từ 1.0.0-alpha.0 trở đi; cloak: từ 0.7.0 đến trước 1.0.0-alpha.0.

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

Các khoảng bị ảnh hưởng được CNA ghi nhận như sau:

  • cloak_ecto trên Hex: từ 1.0.0-alpha.0 trở đi bị ảnh hưởng; các version khác được liệt kê là không bị ảnh hưởng.
  • danielberkompas/cloak_ecto trên Git: từ commit a8fa164 trở đi bị ảnh hưởng; các commit khác được liệt kê là không bị ảnh hưởng.
  • cloak trên Hex: 0.7.0 đến trước 1.0.0-alpha.0 bị ảnh hưởng.
  • danielberkompas/cloak trên Git: từ commit 8699e64 đến trước 681c970 bị ảnh hưởng.

Các sản phẩm và nhánh trên cần được đánh giá riêng. Việc Ecto code được tách khỏi cloak không chứng minh rằng package cloak_ecto đã được sửa, vì package tách riêng này vẫn có khoảng bị ảnh hưởng được ghi nhận.

Chi tiết kỹ thuật

Thành phần bị ảnh hưởng là Cloak.Ecto.PBKDF2; trong mã cloak trước đây, thành phần tương ứng là Cloak.Fields.PBKDF2. Callback dump/1 được đưa vào field module gọi :pbkdf2.pbkdf2/4 nhưng truyền config[:size] vào vị trí dành cho số vòng lặp. Thiết lập :iterations vẫn được kiểm tra hợp lệ nhưng không được sử dụng trong lời gọi này. Với cấu hình mặc định iterations: 600_000 và size: 32, mỗi hash chỉ thực hiện 32 vòng PBKDF2 thay vì 600,000 vòng, làm giảm đáng kể work factor dự kiến. Dữ liệu mà kẻ tấn công thử đoán là các plaintext có entropy thấp, sau khi đã có các giá trị đã băm và secret được cấu hình. Tài liệu hiện có không xác định một endpoint mạng cụ thể hoặc một đường thực thi khác ngoài callback này.

Khả năng khai thác

  • Khả năng tiếp cận: Giai đoạn đoán giá trị là offline sau khi kẻ tấn công có được database dump chứa các giá trị đã băm và secret được cấu hình. Metadata tấn công được cung cấp đánh dấu khả năng tiếp cận qua network, nhưng phần mô tả kỹ thuật không xác định endpoint cụ thể.
  • Điều kiện: Kẻ tấn công cần cả dữ liệu đã băm và secret; lỗ hổng không tự cung cấp các điều kiện này.
  • Xác thực và tương tác: Record đã chuẩn hóa mô tả yêu cầu không có privilege và không cần user interaction sau khi các điều kiện trên được đáp ứng, với attack complexity thấp.
  • Trạng thái khai thác: CNA công bố proof of concept để xác nhận số vòng thực tế. Evidence hiện có không nêu chiến dịch, nạn nhân hoặc việc khai thác đang hoạt động.

Tác động kỹ thuật

  • Tính bí mật: Kẻ tấn công có database dump và secret có thể thử đoán các plaintext entropy thấp với chi phí thấp hơn nhiều so với work factor được cấu hình.
  • Phạm vi dữ liệu: Các giá trị có không gian đoán nhỏ hoặc có thể dự đoán, như địa chỉ email, có nguy cơ cao hơn. Evidence không khẳng định rằng mọi plaintext đều có thể được khôi phục.
  • Quyền và phạm vi: Lỗi này chủ yếu làm suy yếu bảo vệ confidentiality của giá trị hash. Không có đường dẫn được tài liệu hóa để trực tiếp thay đổi dữ liệu hoặc ảnh hưởng availability.
  • Hạn chế vận hành: Việc sửa lỗi yêu cầu tính lại stored hash, vì vậy có thể cần phối hợp giữa thay đổi code, triển khai và cập nhật dữ liệu.

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

Lỗ hổng có thể làm lộ plaintext gốc của các giá trị entropy thấp, chẳng hạn địa chỉ email, từ các giá trị hash đã lưu. Tác động trực tiếp là mất tính bí mật của dữ liệu được bảo vệ bằng field PBKDF2; advisory không mô tả khả năng sửa đổi bản ghi hoặc làm gián đoạn dịch vụ thông qua lỗi này.

Mức độ rủi ro phụ thuộc vào việc kẻ tấn công có lấy được database dump và secret hay không, cũng như khả năng đoán của plaintext. Sau khi sửa cách tạo hash, các giá trị đã lưu phải được tính lại, vì hash cũ sẽ không còn khớp với cách derivation đã sửa.

Cách khắc phục

  1. Với cloak_ecto, evidence hiện có không xác định một fixed release. Áp dụng workaround đã được CNA nêu: override dump/1 trong field module để gọi :pbkdf2.pbkdf2/5 với :iterations và :size đã cấu hình.
  2. Sau khi sửa cách derivation, tính lại toàn bộ stored hash. Các giá trị cũ không còn khớp với kết quả hash mới.
  3. Với cloak, 1.0.0-alpha.0 nằm ngoài khoảng semver bị ảnh hưởng vì Ecto components đã được tách sang package khác. Tuy nhiên, ứng dụng sử dụng cloak_ecto vẫn phải xử lý khoảng bị ảnh hưởng riêng; chỉ nâng package bao quanh không chứng minh rằng các hash đã lưu hoặc code PBKDF2 đã được sửa.
  4. Xác nhận bằng test rằng dump/1 sử dụng số vòng :iterations thực tế và triển khai kế hoạch recompute hash trước khi coi dữ liệu đã được bảo vệ lại.

Cách phát hiện

  • Kiểm kê dependency manifest, lockfile và artifact triển khai để tìm cloak và cloak_ecto, sau đó đối chiếu version hoặc commit với các khoảng bị ảnh hưởng.
  • Xác định các field module sử dụng Cloak.Fields.PBKDF2 hoặc Cloak.Ecto.PBKDF2; không chỉ dựa vào việc :iterations xuất hiện trong cấu hình, vì thiết lập này có thể được validate nhưng không được dùng.
  • Rà soát cấu hình của từng field cho :secret, :iterations và :size, đồng thời xác định dữ liệu nào được lưu dưới dạng PBKDF2 hash.
  • Trong môi trường kiểm thử, gọi dump/1 với giá trị kiểm soát và xác minh kết quả được tạo bằng số vòng :iterations đã cấu hình, không phải chỉ bằng :size.
  • Rà soát quyền truy cập database dump và secret như một biện pháp phòng ngừa. Advisory không xác định log event hoặc IOC cụ thể; không có log phù hợp không chứng minh rằng dữ liệu an toàn.
Nguồn (17)
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.