Event Field Concatenation in JDBC
Lambda event fields are directly concatenated into SQL strings executed by JDBC Statement.
SQL injection vulnerability where Lambda event fields are concatenated into SQL strings executed by JDBC without parameterization or proper binding, potentially allowing attackers to read or modify data, dump tables, or alter schema via crafted Lambda event payloads.
import com.amazonaws.services.lambda.runtime.*;
import java.sql.*;
import java.util.Map;
public class DatabaseLambda implements RequestHandler<Map<String, Object>, String> {
public String handleRequest(Map<String, Object> event, Context context) {
Connection conn = DriverManager.getConnection(System.getenv("DATABASE_URL"));
Statement stmt = conn.createStatement();
Map<String, String> pathParams = (Map<String, String>) event.get("pathParameters");
String userId = pathParams.get("userId");
String status = pathParams.get("status");
// VULNERABLE: String concatenation
String query = "SELECT * FROM users WHERE id = '" + userId +
"' AND status = '" + status + "'";
ResultSet rs = stmt.executeQuery(query);
return "{\"status\": \"success\"}";
}
}import com.amazonaws.services.lambda.runtime.*;
import java.sql.*;
import java.util.Map;
public class DatabaseLambda implements RequestHandler<Map<String, Object>, String> {
public String handleRequest(Map<String, Object> event, Context context) {
Connection conn = DriverManager.getConnection(System.getenv("DATABASE_URL"));
Map<String, String> pathParams = (Map<String, String>) event.get("pathParameters");
String userId = pathParams.get("userId");
String status = pathParams.get("status");
// SECURE: PreparedStatement with ? placeholders
PreparedStatement stmt = conn.prepareStatement(
"SELECT * FROM users WHERE id = ? AND status = ?"
);
stmt.setString(1, userId);
stmt.setString(2, status);
ResultSet rs = stmt.executeQuery();
return "{\"status\": \"success\"}";
}
}The vulnerable code uses string concatenation with Statement.executeQuery() to build SQL queries with Lambda event data, allowing SQL injection attacks. The fixed version uses PreparedStatement with ? placeholders and setString() methods to safely bind parameters.
Lambda event fields are directly concatenated into SQL strings executed by JDBC Statement.
Sourcery automatically identifies sql injection from lambda event data in jdbc sql statement in aws lambda and many other security issues in your codebase.