Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • ⚠️ Prototype Pollution: Khi Prototype Bị Lợi Dụng Để Tấn Công Ứng Dụng


    Prototype Pollution là một lỗ hổng bảo mật trong JavaScript, cho phép kẻ tấn công chèn hoặc ghi đè các thuộc tính tùy ý lên prototype của các object toàn cục (ví dụ: Object.prototype).
    Do cơ chế kế thừa (prototype chain) của JavaScript, các thuộc tính bị “ô nhiễm” này có thể ảnh hưởng đến toàn bộ object được tạo ra sau đó trong ứng dụng.

    Nói cách khác, chỉ cần kiểm soát được prototype, attacker có thể gián tiếp kiểm soát hành vi của rất nhiều object khác mà lẽ ra không thể truy cập trực tiếp.
    🔍 Prototype Chain và vì sao nó nguy hiểm?

    Trong JavaScript, khi truy cập một thuộc tính của object: obj.property
    Nếu property không tồn tại trong obj, JavaScript sẽ tìm ngược lên prototype (obj.__proto__, rồi Object.prototype, …).

    👉 Nếu attacker có thể thêm thuộc tính vào Object.prototype, thì mọi object trong ứng dụng đều có thể “vô tình” sử dụng thuộc tính đó.

    Ví dụ nguy hiểm: Object.prototype.isAdmin = true;

    Khi đó: const user = {}; if (user.isAdmin) { // quyền admin bị bypass }
    ⚙️ Polluting a Config Object via Prototype Pollution

    Prototype pollution thường xảy ra khi ứng dụng:
    • Merge object không an toàn (Object.assign, lodash.merge, deepMerge…)
    • Parse JSON hoặc input từ user mà không lọc các key đặc biệt như:
      • __proto__
      • prototype
      • constructor
    Ví dụ: { "__proto__": { "debug": true } }

    Sau khi merge: if (config.debug) { // debug mode bị bật trên toàn hệ thống }
    ➡️ Dù attacker không truy cập trực tiếp được config, nhưng bằng prototype pollution, họ đã ghi đè hành vi của ứng dụng.
    🔗 Vì sao Prototype Pollution thường được chain với lỗ hổng khác?

    Prototype pollution hiếm khi khai thác được ngay lập tức, nhưng nó rất nguy hiểm vì có thể kết hợp (chain) với các lỗ hổng khác: 🌐 Client-side JavaScript
    • Dẫn đến DOM-based XSS
    • Ví dụ: ghi đè innerHTML, onerror, src, href…
    🖥️ Server-side JavaScript (Node.js)
    • Có thể gây Logic bypass
    • Nguy hiểm hơn: Remote Code Execution (RCE) trong một số framework hoặc thư viện

    👉 Chỉ cần ứng dụng xử lý thuộc tính bị attacker kiểm soát theo cách không an toàn, prototype pollution sẽ trở thành bàn đạp cho tấn công nghiêm trọng hơn.
    🛡️ Cách phòng chống Prototype Pollution

    Một số biện pháp quan trọng:
    • ❌ Không merge object từ user input một cách mù quáng
    • 🚫 Filter hoặc block các key nguy hiểm: __proto__, constructor, prototype
    • ✅ Sử dụng Object.create(null) cho object không cần prototype
    • 📦 Cập nhật thư viện (lodash, express, etc.) lên phiên bản đã fix
    • 🔍 Thực hiện security review với các chức năng xử lý JSON / config

    🧠 Kết luận

    Prototype Pollution không phải lúc nào cũng gây tác hại ngay, nhưng nó là một lỗ hổng nền tảng cực kỳ nguy hiểm.
    Khi kết hợp với DOM XSS, logic flaw hoặc insecure deserialization, hậu quả có thể từ chiếm quyền người dùng cho tới RCE trên server.

    👉 Với các ứng dụng JavaScript hiện đại (frontend & backend), việc hiểu và phòng chống Prototype Pollution là bắt buộc đối với developer và pentester.


    Click image for larger version

Name:	6787c5b0dc1c8afcb2da73cd_645384f22dd2b863e455fd1f_example.jpg
Views:	11
Size:	49.0 KB
ID:	438713
Working...
X