Kestra-io Kestra OSS bị bypass xác thực, cho phép thực thi mã từ xa không cần đăng nhập

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

Lỗ hổng CVE-2026-49869 là lỗ hổng thuộc các loại Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), Incomplete List of Disallowed Inputs, Improper Authentication và 1 loại khác, ảnh hưởng tới kestra (phiên bản bị ảnh hưởng: < 1.0.45 và >= 1.1.0, < 1.3.21). Lỗ hổng này được xếp hạng ở mức Nghiêm trọng, với điểm CVSS 10. Lỗ hổng này đã được ghi nhận khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

Kestra là một nền tảng orchestration hướng sự kiện, mã nguồn mở. Trước 1.0.451.3.21, AuthenticationFilter trong Kestra OSS sử dụng request.getPath().endsWith("/configs") để đưa endpoint cấu hình công khai vào danh sách miễn Basic Auth. Vì việc kiểm tra là so khớp hậu tố thay vì so khớp chính xác path, mọi API path có segment cuối là configs đều có thể bypass xác thực hoàn toàn. Kẻ tấn công từ xa không cần xác thực có thể lợi dụng lỗi này để tạo và thực thi workflow tùy ý mà không cần credential. Vì Kestra mặc định cung cấp các plugin thực thi script (plugin-script-shell, plugin-script-python, v.v.), điều này trực tiếp dẫn đến Remote Code Execution không cần xác thực với quyền root bên trong Kestra worker container. Lỗ hổng này được sửa trong 1.0.451.3.21.

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

  • Kestra OSS trước 1.0.45 được đánh dấu là bị ảnh hưởng.
  • Kestra OSS từ 1.1.0 đến trước 1.3.21 được đánh dấu là bị ảnh hưởng.
  • Vendor advisory xác định bản sửa cho branch 1.0 là 1.0.45 và cho branch 1.3 là 1.3.21.
  • Không suy luận trạng thái an toàn cho các branch hoặc bản phát hành không được liệt kê trong structured facts và advisory.

Chi tiết kỹ thuật

Lỗi nằm trong AuthenticationFilter của Kestra OSS. Bộ lọc dự định chỉ miễn xác thực cho các endpoint cấu hình công khai, nhưng lại dùng request.getPath().endsWith("/configs") thay vì so khớp chính xác đường dẫn. Vì vậy, mọi API path có segment cuối là configs đều có thể bỏ qua Basic Auth, bao gồm các đường dẫn để tạo hoặc ghi đè flow, kích hoạt execution, ghi KV, xóa flow, xóa dashboard và xóa audit log. Kẻ tấn công kiểm soát các định danh tài nguyên trong đường dẫn, nên có thể tạo một flow có tên configs rồi thực thi flow đó mà không cần thông tin xác thực. Các plugin thực thi script như plugin-script-shellplugin-script-python được cài mặc định, vì vậy chuỗi tấn công này có thể dẫn đến thực thi lệnh tùy ý với UID 0 trong Kestra worker container. Advisory cũng mô tả khả năng SSRF qua hàm http() của Pebble khi kết hợp với bypass xác thực. Việc thoát trực tiếp khỏi container sang Docker host không được xác nhận; advisory nêu rằng worker container không có CAP_SYS_ADMIN và không mount /var/run/docker.sock.

Khả năng khai thác

Lỗi có thể khai thác từ xa qua mạng tới HTTP service của Kestra, với điều kiện instance chạy phiên bản bị ảnh hưởng và kẻ tấn công có khả năng kết nối tới service. Không cần xác thực và không cần người dùng tương tác; record cũng xác định attack complexity thấp. Record đánh dấu lỗi là đã bị khai thác và có public exploit, còn vendor advisory cung cấp một PoC cho chuỗi bypass xác thực, tạo flow và thực thi flow. Bypass chỉ áp dụng khi segment cuối của path đúng bằng configs, nhưng giới hạn này không ngăn được khai thác vì kẻ tấn công có thể tạo flow với tên đó. Evidence được cung cấp không nêu tên chiến dịch, nạn nhân hoặc vụ xâm nhập cụ thể nào.

Tác động kỹ thuật

Lỗi làm mất tính chất bảo vệ của lớp Basic Auth đối với các route có segment cuối là configs. Kết quả trực tiếp có thể là tạo, thay đổi, thực thi hoặc xóa tài nguyên mà không cần danh tính hợp lệ, trong đó workflow có script task có thể chạy lệnh với quyền root bên trong worker container. Hàm http() của Pebble còn có thể bị lợi dụng để gửi request tới dịch vụ nội bộ hoặc cloud metadata endpoint, tạo nguy cơ lộ dữ liệu và credential tùy thuộc cấu hình mạng và quyền của môi trường. Tác động bao gồm mất bí mật, mất toàn vẹn, gián đoạn workload và suy giảm auditability. Phạm vi được xác nhận là worker container; evidence không xác nhận host escape trực tiếp hoặc quyền kiểm soát toàn bộ máy chủ.

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

  • Thực thi và kiểm soát workload: Kẻ tấn công có thể tạo hoặc thực thi workflow không được cấp phép, làm thay đổi hoạt động orchestration và sử dụng tài nguyên worker.
  • Mất bí mật dữ liệu: Script execution có thể đọc dữ liệu mà worker container truy cập được. SSRF cũng có thể mở đường tới dịch vụ nội bộ hoặc cloud metadata endpoint; việc lộ cloud credential phụ thuộc vào môi trường triển khai và quyền của credential.
  • Mất toàn vẹn: Các flow, KV entry, dashboard hoặc tài nguyên khác có segment cuối là configs có thể bị tạo, sửa hoặc xóa theo các route bị ảnh hưởng.
  • Mất khả dụng và khả năng điều tra: Workflow độc hại có thể tiêu thụ tài nguyên worker, còn việc xóa log có thể làm suy giảm khả năng điều tra sau sự cố.
  • Giới hạn phạm vi: Advisory xác nhận thực thi với quyền root trong worker container, nhưng không xác nhận việc thoát trực tiếp sang Docker host.

Cách khắc phục

  1. Nâng cấp theo đúng branch: Với branch 1.0, nâng cấp lên 1.0.45. Với branch 1.3, nâng cấp lên 1.3.21. Không coi một bản sửa của branch này là bằng chứng rằng mọi branch khác đã được sửa.
  2. Giảm khả năng tiếp cận trong thời gian chờ nâng cấp: Giới hạn truy cập mạng tới các service port của Kestra, gồm các port mà advisory xác định là 808032776, chỉ cho các nguồn quản trị hoặc workload tin cậy. Đây là biện pháp containment, không phải bản sửa lỗi.
  3. Điều tra trước khi khôi phục: Rà soát flow, execution, KV, dashboard và log để tìm hoạt động trái phép qua path kết thúc bằng configs. Nếu phát hiện script hoặc SSRF đã chạy, cân nhắc cô lập và dựng lại worker container từ image tin cậy.
  4. Xử lý credential có khả năng bị lộ: Nếu worker có thể truy cập secret, internal service hoặc cloud metadata và evidence cho thấy đã bị truy cập, rotate các credential liên quan sau khi containment.
  5. Xác nhận lại sau thay đổi: Kiểm tra inventory, access control và log sau nâng cấp để bảo đảm instance đang chạy đúng bản sửa của branch tương ứng.

Cách phát hiện

  1. Kiểm kê các instance Kestra OSS và xác định phiên bản theo từng branch. Đánh dấu các instance trước 1.0.45 hoặc trong khoảng >= 1.1.0, < 1.3.21 để ưu tiên xử lý.
  2. Rà soát HTTP access log cho các request không có thông tin xác thực tới những path kết thúc bằng /configs, đặc biệt các request PUT, POST hoặc DELETE liên quan tới flow, execution, KV, dashboard và log. Đây là dấu hiệu đáng ngờ, không phải bằng chứng duy nhất để kết luận đã bị khai thác.
  3. Kiểm tra flow và execution record để tìm flow có tên configs, các task thuộc nhóm script như io.kestra.plugin.scripts.shell.Commands hoặc io.kestra.plugin.scripts.python.Script, và các execution không tương ứng với hoạt động quản trị hợp lệ.
  4. Đối chiếu thay đổi bất thường trong KV, dashboard, template và audit log, đặc biệt các tài nguyên có định danh kết thúc bằng configs.
  5. Rà soát telemetry của worker và container cho container, lệnh hoặc kết nối mạng bất thường, bao gồm kết nối tới dịch vụ nội bộ hoặc cloud metadata endpoint. Evidence hiện có không xác lập IOC cụ thể; việc không thấy log phù hợp không chứng minh instance an toàn.
Nguồn (12)
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á CyStack VulnScan