대량 할당 취약점 (Mass Assignment)
Mass Assignment
설명
대량 할당 취약점(Mass Assignment)은 클라이언트가 전달한 입력값(JSON 등)을 검증 없이 Object.assign과 같은 함수에 직접 넣어 객체에 병합할 때 발생합니다. 이로 인해 공격자가 의도하지 않은 필드를 덮어쓰거나 민감한 시스템 속성을 조작할 수 있습니다. 공격자는 추가적인 권한, 설정, 데이터 변경을 발생시킬 수 있습니다.
잠재적 영향
잘못된 접근 권한 부여(권한 상승): 공격자가 사용자의 권한 또는 권한 수준을 임의로 조작할 수 있음.
민감 정보 노출 또는 변조: 시스템 내부 속성, 설정 또는 비공개 정보를 덮어써서 서비스 동작이 바뀔 수 있음.
해결 방법
Object.assign 등으로 사용자 입력을 병합하기 전에 허용되는 필드만 선택적으로 골라 병합하십시오.
화이트리스트 사용: 서버에서 허용된 속성 목록만을 수동으로 복사하거나, 검증된 데이터만 병합해야 합니다.
민감한 필드는 클라이언트로부터 입력받아서는 안 됩니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
// 취약한 예시
function updateUser(untrustedInput) {
let user = getUserFromDB();
// 검증 없는 입력 병합 (취약)
Object.assign(user, JSON.parse(untrustedInput));
saveUserToDB(user);
}안전한 코드
설명:
취약한 코드: 사용자 입력을 그대로 Object.assign에 넣어 병합하면, 공격자가 관리자 권한 같은 시스템 속성도 마음대로 변경할 수 있기 때문에 매우 위험합니다.
안전한 코드: 화이트리스트 방식으로 실제 변경이 허용된 필드만 골라서 병합하기 때문에, 민감 속성의 무단 변경을 사전에 차단할 수 있습니다.
참조
Last updated