it-swarm.com.de

Fortify-Fehler bei JSON-Injection in Java

Ich bekomme SUBSCRIPTION_JSON vom Client, den ich in String konvertiere, und setze ihn dann mit Hilfe der Gson-Bibliothek auf Model Object. Beim Ausführen des Codes für Fortify-Sicherheit gibt es einen Json-Injektionsfehler für folgenden Code mit der folgenden Meldung:

Hier ist der Fehler:

On line 159 of ActionHelper.Java, the method jsonToObject() writes unvalidated input into JSON. This call could allow an attacker to inject arbitrary elements or attributes into the JSON entity.The method writes unvalidated input into JSON. This call could allow an attacker to inject arbitrary elements or attributes into the JSON entity.

Explanation
JSON injection occurs when:

1. Data enters a program from an untrusted source.

In this case the data enters at getString() in **SubscriptionAction.Java** at line 355.


2. The data is written to a JSON stream.

In this case the JSON is written by fromJson() in **ActionHelper.Java** at line 159.

SubscriptionAction.Java

final String subscriptionJson = subscriptionForm.getString(SUBSCRIPTION_JSON);

ActionHelper.Java 

public static <T> T jsonToObject(final String jsonString, final Class<T> className) {
        T object = null;
        if (StringUtils.isNotBlank(jsonString)) {
            final Gson gson = (Gson) BeanLocator.getInstance().getBean(GSON);
            object = gson.fromJson(jsonString, className);
        }
        return object;
    }

SUBSCRIPTION_JSON-> 

{
    "subscriptions": [{
        "attributeId": "1",
        "items": [{
            "strId": "ALL",
            "nodeType": "G"
        }, {
            "strId": "VO_ENTRY_TIMING_DELAY",
            "nodeType": "L"
        }, {
            "strId": "O_INVALID",
            "nodeType": "L"
        }, {
            "strId": "O_LINE_INVALID",
            "nodeType": "L"
        }, {
            "strId": "V_INVALID",
            "nodeType": "L"
        }, {
            "strId": "V_ADDRESS_INVALID",
            "nodeType": "L"
        }]
    }, {
        "attributeId": "2001",
        "items": [{
            "strId": "OSTBU",
            "nodeType": "L"
        }]
    }]
}
4
shrey mathuria

Sie müssen den erhaltenen Json überprüfen, um sicherzustellen, dass er genau den erwarteten Inhalt enthält, bevor Sie ihn auf Modellobjekt setzen. Sie können einen Prüfer implementieren, der den Json beispielsweise mit einem Muster von Feldern/Format prüft, das erwartet wird.

0
JuliaVI