Skip to main content
Version: 2.13

ARMR Reflect Rule

Overview

The ARMR reflect rule protects against injection via the Java Reflection API. These operations should never be controlled by external input.

When (Event)

To control access to the Java Reflection API, users should specify only the condition and action.

Given (Conditions)

input

This allows the user to specify the source of the untrusted data.

The following three sources are supported:

  • http data introduced via HTTP/HTTPS requests

  • database data introduced via JDBC connections

  • deserialization data introduced via Java or XML deserialization

The rule will trigger if the source of the untrusted data matches that specified in the rule.

Input is a mandatory parameter, and it cannot be an empty list.

Then (Action)

There are two supported actions for the ARMR reflect rule: protect and detect.

protectAll attempts to perform insecure reflective operations are blocked.

If configured, a log message is generated with details of the event.
detectMonitoring mode: the application behaves as normal.

If configured, a log message is generated with details of the event.

A log message must be specified with this action.

As part of the action statement, the user may optionally specify the parameter stacktrace: "full". When this parameter is specified, the stacktrace of the location of the attempted exploit is included in the security log entry.

Examples

In the following example, we define an ARMR reflect rule that prevents insecure reflective operations from the most popular inputs.

app("reflect app"):
requires(version: ARMR/2.13)
reflect("block tainted reflections"):
input(http, database, deserialization)
protect(message: "tainted reflection blocked", severity: High)
endreflect
endapp