NginxProxyManager Nginx Proxy Manager: chèn lệnh hệ điều hành có xác thực dẫn đến thực thi mã từ xa

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

Lỗ hổng CVE-2026-40519 là lỗ hổng Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') ảnh hưởng tới nginx-proxy-manager (phiên bản bị ảnh hưởng: 2.9.14 – ≤ 2.15.1). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 7.7. 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

Các phiên bản Nginx Proxy Manager từ 2.9.14 đến 2.15.1, được sửa trong commit a5db5ed, chứa lỗ hổng thực thi mã từ xa có xác thực thông qua chèn lệnh hệ điều hành trong hàm setupCertbotPlugins() tại backend/setup.js, cho phép kẻ tấn công có quyền certificates:manage thực thi các lệnh tùy ý bằng cách lưu một payload độc hại trong trường dns_provider_credentials. Giá trị dns_provider_credentials do người dùng kiểm soát được nội suy trực tiếp vào một lệnh shell được thực thi thông qua child_process.exec() mà không được sanitize hoặc escape, khiến lệnh được chèn thực thi khi backend khởi động lại.

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

  • NginxProxyManager nginx-proxy-manager bị ảnh hưởng từ 2.9.14 đến và bao gồm 2.15.1 theo semantic versioning.
  • Commit a5db5ed được bản ghi và nguồn dự án xác định là trạng thái sửa lỗi. Commit này thay thế việc ghi credential bằng lệnh shell bằng thao tác file trực tiếp.
  • Release v2.16.0 của dự án liệt kê thay đổi sửa lỗi RCE liên quan đến thứ tự escape. Đây là release dạng tag được xác minh trong nguồn đã kiểm tra có chứa thay đổi liên quan.
  • v2.15.1 được phát hành trước khi commit sửa lỗi được merge, vì vậy không nên xem release này là đã được sửa.

Chi tiết kỹ thuật

NginxProxyManager Nginx Proxy Manager xử lý thông tin xác thực DNS trong hàm setupCertbotPlugins() thuộc backend/setup.js. Giá trị do người dùng kiểm soát trong trường dns_provider_credentials được chèn vào lệnh shell và thực thi qua child_process.exec() mà không được trung hòa hoặc escape an toàn. Các ký tự đặc biệt của shell vì vậy có thể làm thay đổi cấu trúc lệnh, khiến lệnh tùy ý được thực thi khi backend khởi động lại và xử lý giá trị đã lưu. Điều kiện khai thác gồm khả năng truy cập qua mạng, tài khoản đã xác thực có quyền certificates:manage, khả năng lưu giá trị vào trường này và một lần restart backend; bản ghi không xác định chính xác API hoặc con đường persistence được dùng để lưu giá trị. Bản sửa đã loại bỏ việc xây dựng lệnh shell cho thao tác này và chuyển sang các thao tác file trực tiếp của Node.js. Người vận hành vẫn cần xác minh runtime user thực tế, vì quyền của tiến trình backend quyết định phạm vi tác động.

Khả năng khai thác

Lỗ hổng có thể bị khai thác từ xa qua giao diện hoặc API của ứng dụng, nhưng yêu cầu tài khoản đã xác thực có quyền certificates:manage. Người dùng không cần tương tác riêng để lệnh được thực thi, tuy nhiên backend phải khởi động lại hoặc đi qua luồng khởi tạo tương ứng để xử lý dữ liệu đã lưu. Bản ghi mô tả độ phức tạp tấn công thấp và có điều kiện kích hoạt phụ thuộc vào việc restart backend. Bản ghi được cung cấp không xác định một public exploit cụ thể; enrichment được trả về cũng ghi nhận trạng thái Exploitation: none trong phạm vi đánh giá của nó. Điều này không chứng minh rằng việc khai thác không thể xảy ra hoặc không xảy ra ở nơi khác.

Tác động kỹ thuật

Kết quả kỹ thuật của việc khai thác là thực thi lệnh tùy ý trong security context của tiến trình backend. Điều này có thể dẫn đến mất tính bí mật, toàn vẹn và khả dụng của chính instance Nginx Proxy Manager, bao gồm khả năng đọc secret, thay đổi dữ liệu hoặc làm gián đoạn dịch vụ nếu tiến trình có quyền tương ứng. Vì đây là lỗ hổng yêu cầu xác thực và quyền certificates:manage, một tài khoản thông thường không có quyền này không đáp ứng đầy đủ điều kiện khai thác theo bản ghi. Nếu backend chạy với quyền root trong container, tác động bên trong container có thể rất lớn; tuy nhiên bản ghi không xác nhận host compromise hoặc container escape. Mức tác động thực tế phụ thuộc vào quyền runtime, cách lưu trữ secret và các biện pháp cô lập của từng deployment.

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

Khai thác thành công có thể cho phép kẻ tấn công thực thi lệnh với quyền của tiến trình backend, từ đó làm thay đổi dữ liệu hoặc cấu hình mà tiến trình có quyền truy cập.

  • Thông tin nhạy cảm như secret, khóa TLS hoặc cơ sở dữ liệu có thể bị đọc nếu runtime user có quyền tương ứng.
  • Dịch vụ có thể bị gián đoạn hoặc bị thay đổi cấu hình; persistence cũng có thể xảy ra nếu tiến trình bị xâm phạm có đủ quyền.
  • Trong các triển khai Docker chạy backend với quyền root, phạm vi tác động bên trong container có thể rộng hơn. Không được mặc định suy ra khả năng thoát container hoặc ảnh hưởng đến host.

Cách khắc phục

  1. Nâng cấp triển khai bị ảnh hưởng lên v2.16.0, release có ghi nhận thay đổi sửa lỗi RCE liên quan. Nếu triển khai từ source, chuyển sang commit a5db5ed hoặc xác minh một commit khác đã áp dụng cùng thay đổi ghi file trực tiếp thay cho lệnh shell.
  2. Không xem v2.15.1 là bản đã sửa. Kiểm tra cả version image, tag release và commit thực tế vì một image hoặc source build có thể không trùng với thông tin hiển thị trong giao diện.
  3. Trong thời gian chưa thể nâng cấp, giới hạn chặt quyền certificates:manage cho các tài khoản tin cậy và tránh cho dữ liệu không tin cậy đi vào dns_provider_credentials. Đây chỉ là biện pháp giảm rủi ro, không thay thế bản sửa.
  4. Nếu có khả năng giá trị độc hại đã được lưu hoặc lệnh đã chạy, xử lý như một sự cố tiềm ẩn: bảo toàn bằng chứng, rà soát các lần restart và xoay vòng secret, khóa TLS hoặc thông tin xác thực mà backend có thể truy cập.
  5. Sau khi nâng cấp, xác minh mã thực tế dùng fs.mkdir và fs.writeFile cho credential file, thay vì tiếp tục xây dựng lệnh shell từ dữ liệu người dùng.

Cách phát hiện

  1. Kiểm kê các bản triển khai Nginx Proxy Manager và xác định chính xác version hoặc commit đang chạy, đặc biệt với các bản nằm trong dải bị ảnh hưởng.
  2. Liệt kê các tài khoản và role có quyền certificates:manage, đồng thời kiểm tra các thay đổi gần đây đối với cấu hình chứng chỉ và thông tin dns_provider_credentials.
  3. Rà soát giá trị đã lưu để tìm nội dung shell bất thường hoặc ký tự điều khiển lệnh. Đây là kiểm tra phòng ngừa, không phải IOC đã được xác nhận.
  4. Kiểm tra audit log, container log và process telemetry quanh các lần backend restart để phát hiện shell hoặc tiến trình con bất thường do backend tạo ra. Việc không thấy log đáng ngờ không chứng minh hệ thống an toàn.
  5. Xác minh mã đang chạy thực hiện ghi file bằng các thao tác fs trực tiếp thay vì xây dựng lệnh shell qua child_process.exec() cho đường dẫn xử lý credential.
Nguồn (25)
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