Tóm tắt ý tưởng chính
WAF (Web Application Firewall) là tuyến phòng thủ quan trọng bảo vệ các ứng dụng web khỏi SQLi. Tuy nhiên, nghiên cứu từ Claroty Team82 đã chỉ ra một kỹ thuật mới: tận dụng các hàm JSON hỗ trợ trong PostgreSQL và MySQL để bypass signature-based detection của nhiều WAF.
1. Các DBMS hỗ trợ JSON
PostgreSQL và MySQL 5.7+ hỗ trợ JSON syntax. Kẻ tấn công có thể khai thác bằng cách so sánh giá trị với các field tổng hợp từ chuỗi JSON.
SELECT * FROM users WHERE '1' = '{"a":"1"}'::json->>'a';
Hoặc trong MySQL:
SELECT * FROM users WHERE JSON_EXTRACT('{"a":1}', '$.a') = 1;
Signature-based WAF không nhận ra kiểu tấn công này.
2. Phân tích các payload thông minh
| Mục đích | Payload JSON | Đồng nghĩa với |
| ————– | ————————————————————- | ————– |
| Bypass so sánh | 1 = '{"a":1}'::json->>'a' | 1 = 1 |
| Bypass logic | true = json_extract('{"x":true}', '$.x') | true = true |
| Truy vấn field | SELECT * FROM t WHERE id = JSON_EXTRACT('{"id":5}', '$.id') | id = 5 |
Trong Markdown (chuyển dạng sang HTML):
| Mục đích | Payload JSON | Đồng nghĩa với |
|---|---|---|
| Bypass so sánh | 1 = ‘{“a”:1}’::json->>’a’ | 1 = 1 |
| Bypass logic | true = json_extract(‘{“x”:true}’, ‘$.x’) | true = true |
| Truy vấn field | id = JSON_EXTRACT(‘{“id”:5}’, ‘$.id’) | id = 5 |
3. Đánh giá ảnh hưởng với các WAF phổ biến
Nghiên cứu đã thử payload JSON-based SQLi trên nhiều WAF phổ biến. Kết quả:
`
| WAF | Kết quả |
|---|---|
| AWS WAF | Bị bypass |
| Cloudflare | Bị bypass |
| F5 | Bị bypass |
| Imperva | Bị bypass |
| Azure WAF | Chặn được |
4. Tại sao bypass được?
Phần lớn WAF dựa trên pattern match: regex, keyword filter, logic rule… Payload JSON lại:
- Không dùng keyword nhận diện như
OR,UNION,SELECTtheo kiểu truyền thống - Truy vấn JSON trông “an toàn” với WAF signature thường
- Vẫn hợp lệ với câu SQL backend
Do đó, signature-based detection bỏ qua hoàn toàn.
5. Giải pháp và khuyến nghị
- WAF cần update signature để nhận dạng các đường truy vấn JSON-based
- Sử dụng các công cụ context-aware thay vì regex thuần tuự
- Dev backend cần sử dụng prepared statement để chống SQLi dừ dọl
Source link: JS-on Security Off: Abusing JSON-based SQL to Bypass WAF






