← Back to All Scanners
Injection AttacksCritical Severity

Expression Language Injection Scanner

Tests for EL injection in Java EE applications.

What is Expression Language Injection?

Expression Language (EL) Injection occurs when untrusted user input is included in Java EE Expression Language expressions. EL is used in JSP pages and JSF to access Java objects. Attackers can inject EL syntax to call arbitrary methods, access sensitive data, or achieve remote code execution.

Why is This Important?

EL Injection is critical because it provides direct access to Java objects and methods on the server. Many Java web applications use EL, and vulnerabilities can lead to complete server compromise. EL Injection often appears in places developers don't expect, like error messages or log entries.

How It Works

1. Input Discovery

Maps all user input points including forms, headers, cookies, and API parameters for injection testing.

2. Injection Testing

Executes sophisticated injection payloads designed to bypass filters and WAFs while detecting vulnerabilities.

3. Exploitation Validation

Confirms vulnerabilities through safe exploitation, providing proof-of-concept and impact assessment.

Key Capabilities

Advanced injection detection engine combining signature-based and AI-powered analysis for comprehensive coverage.

  • Multi-vector injection testing across all input types
  • WAF and filter bypass techniques built-in
  • Database-specific payload optimization
  • Out-of-band detection for blind vulnerabilities
  • Automated proof-of-concept generation

Frequently Asked Questions

How does EL Injection lead to RCE?

EL can access any object in scope. Attackers use expressions like ${Runtime.getRuntime().exec('command')} or access class loaders to instantiate dangerous classes. JSF 2.x made EL more powerful, increasing attack surface.

Where does EL Injection commonly occur?

Common locations include: JSP pages with unescaped output, JSF value expressions, Spring message expressions, error pages that reflect user input, and anywhere user input is processed through an EL evaluator.

What's the difference between immediate and deferred evaluation?

${} is evaluated immediately, #{} is deferred (used in JSF for method binding). Both can be vulnerable. Deferred expressions are particularly dangerous because they can invoke methods with parameters controlled by attackers.

How do I prevent EL Injection?

Never include user input in EL expressions, use parameterized expressions, escape user input before display, configure EL sandbox features if available, keep application servers and frameworks updated, and audit for reflection-based bypasses.

Related Scanners

Ready to secure your application?

Start testing for expression language injection vulnerabilities today.

Get Started Free