URL 매개변수 및 POST 메서드의 body-content와 같은 사용자 제공 데이터는 항상 신뢰할 수 없고 오염된 것으로 간주해야 합니다.
오염된 데이터를 기반으로 NoSQL 작업을 수행하는 응용 프로그램은 일반 SQL 인젝션 버그와 유사하게 이용될 수 있습니다. 코드에 따라 SQL 인젝션과 동일한 위험이 존재합니다: 공격자는 중요한 정보에 액세스하거나 데이터 무결성을 손상시키는 것을 목표로 합니다. 공격에는 쿼리 연산자, JavaScript 코드 또는 문자열 작업이 포함될 수 있습니다.
이 문제는 ODM(Object Document Mapper) 라이브러리를 사용하거나 데이터 사이즈 또는 허용된 문자를 기반으로 사용자 제공 데이터의 유효성을 검사하여 공격 가능성을 줄일 수 있습니다.
규칙을 어긴 코드
DynamoDB의 경우 FilterExpression, ProjectionExpression 또는 KeyConditionExpression 파라미터가 사용자 입력한 값의 영향을 받는 경우 예기치 않은 NoSQL 작업이 실행될 수 있습니다.
DYNAMO_CLIENT = boto3.client('dynamodb', config=config)
DYNAMO_CLIENT.scan(
FilterExpression= username + " = :u AND password = :p", # username은 사용자 입력값
ExpressionAttributeValues={
":u": { 'S': username },
":p": { 'S': password }
},
ProjectionExpression="username, password",
TableName="users"
) # 규칙을 어긴 코드
규칙을 준수한 해결책
DynamoDB의 경우 FilterExpression, ProjectionExpression 및 KeyConditionExpression 파라미터는 사용자 입력한 값의 영향을 받지 않아야 합니다.
DYNAMO_CLIENT = boto3.client('dynamodb', config=config)
DYNAMO_CLIENT.scan(
FilterExpression= "username = :u AND password = :p",
ExpressionAttributeValues={
":u": { 'S': username },
":p": { 'S': password }
},
ProjectionExpression="username, password",
TableName="users"
)
같이보면 좋은 자료
- OWASP Top 10 2021 Category A3 - 인젝션
- OWASP Top 10 2017 Category A1 - 인젝션
- MITRE, CWE-20 - 부적절한 입력 검증
- MITRE, CWE-943 - 데이터 쿼리 로직 삽입
-
SANS Top 25 - 컴포넌트 간의 안전하지 않은 상호 작용
If you like SONARKUBE, don’t forget to give me a star.