Почему ZAP считает, что в этой ситуации переполнение буфера?

Я открываю для себя ZAP и его активный сканер. Я пытался выполнить активное сканирование варианта уязвимого магазина BodgeIT. в basket.jsp страница, внутренний код выглядит так:

stmt = conn.prepareStatement("INSERT INTO BASKETCONTENTS (BasketID, ProductID, Quantity, PriceToPay) VALUES (" + basketId + ", " + productId + ", " + Integer.parseInt(quantity) + ", " + price + ")"); // add it in the basket in the DB

quantity переменная должна быть целым числом, значение которого получено из запроса клиента в качестве параметра POST.

ZAP обнаружил, что при предоставлении нечислового значения сервер возвращает ошибку 500 и закрывает соединение:

Проблема в том, что бэкэнд написан на Java, который имеет механизм проверки границ, что делает невозможным для разработчика внедрение уязвимостей переполнения буфера (с самим языком).

Итак, почему ZAP думает, что есть переполнение буфера, просто видя эту "ошибку 500" + "соединение закрыто"?

Изменить: я проверил правило сканирования для переполнения буфера и нашел это: https://github.com/zaproxy/zap-extensions/blob/master/src/org/zaproxy/zap/extension/ascanrules/BufferOverflow.java#L119

ZAP сообщает о переполнении буфера каждый раз, когда он получает внутреннюю ошибку сервера?

1 ответ

Решение

Некоторые уязвимости трудно обнаружить с абсолютной уверенностью. В этом случае ZAP отправил необычно большое значение, а приложение вернуло ошибку.

Как указано в разделе "Другая информация", это может привести к переполнению буфера. Вам решать, если это или сейчас. Вы определили, что это не так, но вы также можете изменить приложение, чтобы оно не возвращало 500 в этих случаях.

Другие вопросы по тегам