Lỗ hổng nghiêm trọng trong AWS Amplify cho phép kẻ tấn công thực thi mã từ xa


Tổng quan
Thời gian gần đây các chuyên gia an ninh mạng đã phát hiện ra một lỗ hổng bảo mật cực kỳ nghiêm trọng trong AWS Amplify Studio - một nền tảng phát triển giao diện người dùng (UI) trực quan do Amazon Web Services cung cấp, giúp các nhà phát triển và nhà thiết kế tạo, quản lý và triển khai ứng dụng web/mobile nhanh chóng. Lỗ hổng này được gán mã định danh CVE-2025-4318, với điểm CVSS 9,5/10, cho phép kẻ tấn công thực thi mã từ xa (RCE) trên máy của lập trình viên hoặc hệ thống tự động CI/CD.
Mô tả lỗ hổng
Mã định danh: CVE-2025-4318
Mức độ: Critical (CVSS 4.0 = 9.5/10)
Ngày công bố: 5 tháng 5 2025
Mô tả: lỗ hổng RCE (Remote Code Execution) nghiêm trọng được phát hiện trong gói @aws-amplify/codegen-ui
– thành phần của AWS Amplify Studio
Ảnh hưởng chính:
Thực thi mã từ xa (RCE) với quyền của hệ thống build
Có thể dẫn đến chiếm quyền kiểm soát CI/CD pipeline
Tác động đến toàn bộ chuỗi cung ứng phần mềm (supply chain) nếu mã sinh ra được sử dụng rộng rãi
Tại sao lỗ hổng tồn tại?
- Lỗ hổng này tồn tại do chính cơ chế thiết kế trong xử lý của AWS. Như chúng ta đã biết, thư viện
@aws-amplify/codegen-ui
cho phép người dùng tạo UI components bằng cách cung cấp cấu trúc JSON mô tả các thuộc tính (props) nhưlabel
,placeholder
,value
,onChange
…Để làm được đó, thư viện này cho phép người dùng sử dụng các biểu thức JavaScript dưới dạng string.
Điều này dẫn đến việc AWS Amplify dùng
eval()
hoặcnew Function()
để xử lý input động mà không lọc, dẫn đến nhiều tiềm ẩn rủi ro bị Attacker khai thác.Bên cạnh đó, việc thực thi lỗ hổng đến từ việc không có cơ chế kiểm soát giá trị hoặc nội dung nguy hiểm
- Điều này sẽ dấn đến kẻ tấn công có thể thực thi RCE nếu attacker ghi vào trường
value
chuỗi như:
\=> Thì nó sẽ được thực thi ngay lập tức trong môi trường Node.js của máy build hoặc server CI/CD.
Cách kẻ tấn công khai thác lỗ hổng
- Ban đầu kẻ tấn công sẽ thực hiện tạo một script Bash trong thư viện
@aws-amplify/codegen-ui@2.20.2
Khi mà kẻ tấn công chạy script trên nó sẽ gây ra một số hậu quả:
Một file JSON chứa payload
require('child_process').execSync('touch /tmp/pwned')
sẽ được tạo.Node.js sẽ thực thi payload thông qua
new Function(...)
, mô phỏng hành vi của Amplify codegen cũ.Một file
/tmp/pwned
sẽ được tạo nếu khai thác thành công.
Sau đó kẻ tấn công tiếp tục tạo một file có tên
run.js
nhằm thực hiệneval()
payload từ JSON. và chạy HTTP server trên cổng 8080 để phục vụ các file nếu cần trình duyệt truy cập.
run.js
sẽ lấy chuỗi từplaceholder.value
và thực thi bằngeval()
.http-server
dùng để phục vụ file qua HTTP, có thể dùng để:Giả lập máy victim truy cập file từ attacker.
Demo trong môi trường sandbox.
Cuối cùng sau khi đã chạy các file script và chèn mã JavaScript độc hại vào các tệp
JSON
định nghĩa giao diện, từ đó có thể:Thực thi lệnh hệ thống.
Truy cập hoặc đánh cắp dữ liệu nhạy cảm.
Thay đổi file hoặc cài mã độc duy trì quyền truy cập trái phép.
Tổng kết
Lỗ hổng tồn tại trong thư viện @aws-amplify/codegen-ui
phiên bản 2.20.2
và có thể ảnh hưởng đến CI/CD pipelines, ứng dụng Amplify Studio, hoặc môi trường Node.js cục bộ nếu thực hiện xử lý không an toàn với file JSON component do người dùng gửi.
Lỗ hổng này cũng là minh chứng cho thấy một chút bất cẩn trong xử lý dữ liệu người dùng có thể mở đường cho tấn công hệ thống toàn diện, đặc biệt trong thời đại low-code/no-code ngày càng phổ biến.
Khuyến nghị
Cập nhật phiên bản mới nhất của
@aws-amplify/codegen-ui
:- npm install @aws-amplify/codegen-ui@latest
Không tải hoặc sử dụng file JSON UI component không rõ nguồn gốc.
Tuyệt đối không dùng
eval()
,Function()
, hoặcvm.runInNewContext()
để xử lý các giá trị từ JSON mà chưa xác thực.Kiểm tra thư mục
/tmp
hoặc~
thường xuyên nếu nghi ngờ hệ thống đã bị khai thác (touch /tmp/pwned
là payload mẫu).Sử dụng máy ảo hoặc Docker để thử nghiệm các công cụ liên quan đến mã code sinh động tự động (codegen) từ UI.
Tham khảo
Subscribe to my newsletter
Read articles from Lưu Tuấn Anh directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
