Lab: Finding and exploiting an unused API endpoint
1. Thông tin lab
- Tên lab: Finding and exploiting an unused API endpoint
- Mức độ: Practitioner
- Trạng thái: Solved
- Mục tiêu: Khai thác một API endpoint ẩn/không được sử dụng để mua sản phẩm Lightweight "l33t" Leather Jacket với giá thấp hơn giá gốc.
-
Tài khoản được cung cấp:
wiener:peter
2. Mô tả lỗ hổng
Ứng dụng tồn tại lỗ hổng trong API quản lý giá sản phẩm. Mặc dù chức năng thay đổi giá không hiển thị trực tiếp trên giao diện người dùng, endpoint API /api/products/<id>/price vẫn hỗ trợ phương thức PATCH.
Attacker có thể lợi dụng việc API endpoint chưa được bảo vệ chặt chẽ để gửi request thay đổi giá sản phẩm. Bằng cách sửa giá của sản phẩm Lightweight "l33t" Leather Jacket về 0, attacker có thể thêm sản phẩm vào giỏ hàng và đặt mua với giá $0.00.
3. Công cụ sử dụng
- Burp Suite
- Burp Browser
- Proxy HTTP history
- Repeater
4. Các bước thực hiện
Bước 1: Truy cập lab và quan sát sản phẩm
Truy cập lab bằng Burp Browser.
Ban đầu, chưa cần đăng nhập. Truy cập vào một sản phẩm bất kỳ trên website.
Trong quá trình truy cập sản phẩm, Burp Suite sẽ ghi lại các request liên quan đến API trong phần HTTP history.
Bước 2: Quan sát request trong Burp Suite
Vào:
Proxy > HTTP history
Tìm request API liên quan đến giá sản phẩm, ví dụ:
GET /api/products/3/price HTTP/2
Host: <lab-domain>
Request này cho thấy ứng dụng sử dụng API để lấy thông tin giá của sản phẩm.
Các thành phần đáng chú ý:
- Method:
GET - Endpoint:
/api/products/1/price - Chức năng: lấy giá sản phẩm
- API có cấu trúc RESTful, có thể thử thay đổi HTTP method để kiểm tra thêm chức năng ẩn
Bước 3: Gửi request sang Repeater
Nhấp chuột phải vào request:
GET /api/products/1/price HTTP/2
Host: <lab-domain>
Chọn:
Send to Repeater
Mục đích là chỉnh sửa method và nội dung request để kiểm tra phản hồi từ server.
Bước 4: Kiểm tra các HTTP method được hỗ trợ
Trong tab Repeater, đổi method từ GET sang OPTIONS:
OPTIONS /api/products/1/price HTTP/2
Host: <lab-domain>
Gửi request và quan sát response.
Response cho biết endpoint này hỗ trợ các method:
GET, PATCH
Điều này cho thấy ngoài việc lấy giá sản phẩm bằng GET, endpoint này còn có thể hỗ trợ cập nhật giá bằng PATCH.
Bước 5: Thử gửi request PATCH
Tiếp tục đổi method từ GET sang PATCH:
PATCH /api/products/1/price HTTP/2
Host: <lab-domain>
Content-Type: application/json
Sau khi gửi request, server trả về thông báo:
Unauthorized
Thông báo này cho thấy có thể cần đăng nhập trước khi thực hiện thao tác cập nhật giá.
Bước 6: Đăng nhập vào tài khoản được cung cấp
Quay lại Burp Browser và đăng nhập bằng tài khoản:
Username: wiener
Password: peter
Sau khi đăng nhập thành công, truy cập sản phẩm:
Lightweight "l33t" Leather Jacket
Bước 7: Tìm request API của sản phẩm Leather Jacket
Trong:
Proxy > HTTP history
Tìm request lấy giá của sản phẩm Lightweight "l33t" Leather Jacket, ví dụ:
GET /api/products/1/price HTTP/2
Host: <lab-domain>
Cookie: session=<session-value>
Nhấp chuột phải vào request này và chọn:
Send to Repeater
Bước 8: Chuyển method sang PATCH
Trong Repeater, đổi method từ GET sang PATCH:
PATCH /api/products/1/price HTTP/2
Host: <lab-domain>
Cookie: session=<session-value>
Gửi request.
Server trả về lỗi liên quan đến Content-Type, cho biết request cần sử dụng:
Content-Type: application/json
Bước 9: Thêm Content-Type và body JSON
Thêm header:
Content-Type: application/json
Sau đó thêm body rỗng:
{}
Request lúc này có dạng:
PATCH /api/products/1/price HTTP/2
Host: <lab-domain>
Cookie: session=<session-value>
Content-Type: application/json
{}
Gửi request.
Server tiếp tục trả về lỗi vì thiếu tham số price.
Thông báo lỗi này giúp xác định rằng API cần một tham số tên là:
price
Bước 10: Khai thác lỗ hổng thay đổi giá sản phẩm
Thêm tham số price vào JSON body và đặt giá trị là 0:
PATCH /api/products/1/price HTTP/2
Host: <lab-domain>
Cookie: session=<session-value>
Content-Type: application/json
{
"price": 0
}
Gửi request.
Response cho thấy request được xử lý thành công. Điều này chứng minh attacker có thể cập nhật giá sản phẩm thông qua API endpoint ẩn.
Bước 11: Kiểm tra giá sản phẩm trên giao diện
Quay lại Burp Browser và reload trang sản phẩm Lightweight "l33t" Leather Jacket.
Quan sát thấy giá sản phẩm đã được thay đổi thành:
$0.00
Điều này xác nhận rằng request PATCH đã thay đổi thành công giá sản phẩm.
Bước 12: Hoàn thành mục tiêu lab
Thêm sản phẩm Lightweight "l33t" Leather Jacket vào giỏ hàng.
Sau đó vào giỏ hàng và chọn:
Place order
Kết quả:
5. Kết quả
Lab đã được giải thành công.
Mục tiêu hoàn thành:
Sản phẩm Lightweight "l33t" Leather Jacket đã được mua thành công với giá $0.00.
6. Nguyên nhân
Nguyên nhân chính của lỗ hổng là:
- API endpoint
/api/products/<id>/pricevẫn hỗ trợ phương thứcPATCH. - Chức năng cập nhật giá sản phẩm không được bảo vệ phân quyền đầy đủ.
- Server cho phép người dùng thường gửi request thay đổi giá sản phẩm.
- Ứng dụng để lộ thông tin qua error message, giúp attacker biết cần sử dụng
Content-Type: application/jsonvà tham sốprice. - Server tin tưởng dữ liệu từ phía client mà không kiểm tra quyền hạn phù hợp.
7. Tác động
Attacker có thể lợi dụng lỗ hổng để:
- Thay đổi giá sản phẩm trái phép.
- Mua sản phẩm với giá thấp hơn giá gốc.
- Gây thiệt hại tài chính cho hệ thống thương mại điện tử.
- Lạm dụng các API endpoint ẩn để thực hiện hành động không được phép.
- Ảnh hưởng đến tính toàn vẹn của dữ liệu sản phẩm.
8. Khuyến nghị khắc phục
Để khắc phục lỗ hổng, cần:
- Kiểm tra phân quyền chặt chẽ ở phía server trước khi cho phép cập nhật giá sản phẩm.
- Không cho phép người dùng thường truy cập các API quản trị hoặc API chỉnh sửa dữ liệu nhạy cảm.
- Giới hạn method được phép sử dụng trên từng endpoint.
- Không để lộ quá nhiều thông tin chi tiết trong error message.
- Kiểm tra role của người dùng trước khi xử lý request
PATCH. - Áp dụng nguyên tắc least privilege.
- Ghi log và giám sát các request bất thường đến các endpoint nhạy cảm.
- Tách biệt rõ API dành cho người dùng thường và API dành cho quản trị viên.
9. Kết luận
Lab này minh họa cách khai thác lỗ hổng unused API endpoint trong ứng dụng web. Mặc dù giao diện người dùng không hiển thị chức năng thay đổi giá sản phẩm, endpoint API vẫn tồn tại và hỗ trợ method PATCH.
Thông qua Burp Suite, attacker có thể phát hiện endpoint /api/products/1/price, kiểm tra method được hỗ trợ bằng OPTIONS, sau đó gửi request PATCH với body JSON để thay đổi giá sản phẩm về 0.
Kết quả cho thấy việc để lộ hoặc không kiểm soát chặt chẽ các API endpoint ẩn có thể dẫn đến hành vi trái phép nghiêm trọng. Do đó, hệ thống cần kiểm tra xác thực, phân quyền và giới hạn quyền truy cập API ở phía server.








Top comments (0)