Unvalidated Event Data in SQL
Lambda event parameters are directly inserted into SQL queries without validation or parameterization.
SQL injection vulnerability where untrusted AWS Lambda event fields flow into SQL strings passed to cursor.execute without parameters, allowing attacker-controlled tokens to alter query structure and potentially read or change data, run dangerous SQL functions, and expose sensitive information.
import pymysql
import json
def lambda_handler(event, context):
body = json.loads(event['body'])
username = body['username']
status = event['queryStringParameters']['status']
connection = pymysql.connect(
host='database.example.com',
user='dbuser',
password='dbpass',
database='mydb'
)
with connection.cursor() as cursor:
# VULNERABLE: f-string interpolation
sql = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(sql)
# VULNERABLE: String concatenation
query = "SELECT * FROM orders WHERE status = '" + status + "'"
cursor.execute(query)
results = cursor.fetchall()
return {
'statusCode': 200,
'body': json.dumps(results)
}import pymysql
import json
def lambda_handler(event, context):
body = json.loads(event['body'])
username = body['username']
status = event['queryStringParameters']['status']
connection = pymysql.connect(
host='database.example.com',
user='dbuser',
password='dbpass',
database='mydb'
)
with connection.cursor() as cursor:
# SECURE: Parameterized query with %s
cursor.execute(
'SELECT * FROM users WHERE username = %s',
(username,)
)
# SECURE: Parameterized query
cursor.execute(
'SELECT * FROM orders WHERE status = %s',
(status,)
)
results = cursor.fetchall()
return {
'statusCode': 200,
'body': json.dumps(results)
}The vulnerable code uses f-strings and string concatenation to build SQL queries with Lambda event data, allowing SQL injection attacks. The fixed version uses parameterized queries with %s placeholders and parameter tuples to safely bind values.
Lambda event parameters are directly inserted into SQL queries without validation or parameterization.
Sourcery automatically identifies sql injection from aws lambda event data in pymysql query and many other security issues in your codebase.