본문 바로가기
보안

🚨 Mass Assignment 공격: 숨겨진 필드를 조작하여 관리자 권한 탈취 🔓

by IT 분석가 2025. 2. 20.
반응형

Mass Assignment 공격

 

📌 목차

  1. Mass Assignment 공격이란?
  2. 공격 원리와 작동 방식
  3. 주요 공격 기법
  4. 보안 위협과 실제 사례
  5. 방어 방법 및 대응 방안

🔍 Mass Assignment 공격이란?

Mass Assignment(대량 할당) 공격은 웹 애플리케이션이 입력된 모든 필드를 자동으로 객체에 할당할 때 발생하는 취약점이다.

개발자가 사용자 입력을 화이트리스트 없이 그대로 모델 객체에 바인딩하면,
공격자는 의도하지 않은 필드를 조작하여 관리자 권한을 탈취하거나, 계정 정보를 변경하는 등의 공격을 수행할 수 있다.

이 취약점은 주로 Ruby on Rails, Express.js, Django, Laravel 등에서 발생한다.


⚙️ 공격 원리와 작동 방식

Mass Assignment 취약점은 프레임워크의 자동 바인딩 기능을 악용하여 공격자가 숨겨진 필드에 값을 할당할 수 있도록 만든다.

 

취약한 사용자 업데이트 API 예제

POST /api/update-profile
Content-Type: application/json

{
  "username": "user123",
  "email": "user@example.com"
}
 

📌 서버에서는 입력된 모든 필드를 데이터베이스 객체에 그대로 바인딩하는 경우, 공격자가 추가적인 필드를 삽입하여 조작 가능

 

공격자가 조작한 요청

POST /api/update-profile
Content-Type: application/json

{
  "username": "hacker",
  "email": "hacker@example.com",
  "isAdmin": true
}
 

🚨 결과:

  • 관리자 권한이 부여됨(isAdmin: true)
  • 기본 사용자가 관리자 계정으로 승격 가능

🚨 주요 Mass Assignment 공격 기법

1️⃣ 관리자 권한 상승(Privilege Escalation)

📌 공격 방식

  • 숨겨진 isAdmin 또는 role 필드를 조작하여 권한 상승

공격 예제

PUT /api/users/1234
Content-Type: application/json

{
  "role": "admin"
}
 

🚨 결과:

  • 일반 사용자가 관리자 계정으로 변환됨

2️⃣ 계정 소유권 탈취(Account Takeover)

📌 공격 방식

  • user_id, email_verified 등의 필드를 변경하여 다른 사용자의 계정을 탈취

공격 예제

PUT /api/users/1234
Content-Type: application/json

{
  "email": "attacker@example.com",
  "email_verified": true
}

 

🚨 결과:

  • 공격자가 다른 사용자의 이메일을 자신의 이메일로 변경 가능
  • 비밀번호 재설정 요청을 통해 계정 탈취 가능

3️⃣ 결제 및 금액 조작(Financial Exploitation)

📌 공격 방식

  • balance, credit_limit, discount 등의 필드를 수정하여 금전적 이득 취득

공격 예제

POST /api/payment
Content-Type: application/json

{
  "amount": 100,
  "discount": 100
}
 

🚨 결과:

  • discount 값을 100으로 설정하여 무료 결제 가능

⚠️ 보안 위협과 실제 사례

보안 위협

  • 🛡️ 권한 상승(Privilege Escalation): 공격자가 관리자 권한을 얻을 수 있음
  • 🎭 계정 탈취(Account Takeover): 이메일 변경을 통해 계정을 가로챌 수 있음
  • 🚀 데이터 조작(Data Manipulation): 포인트, 할인율, 잔액 등을 조작 가능
  • 💳 결제 및 금융 시스템 악용(Financial Exploitation): 결제 금액을 조작하여 서비스 무단 이용 가능

 

실제 발생 사례

  1. 2012년 GitHub에서 발생한 Mass Assignment 취약점
    • 공격자가 관리자 권한을 부여하여 GitHub 저장소를 탈취 가능
  2. 2018년 Uber API에서 발견된 Mass Assignment 취약점
    • 사용자가 다른 운전자의 계정을 수정할 수 있는 취약점 발견

🔐 방어 방법 및 대응 방안

1. 화이트리스트(Whitelist) 필드만 허용

  • 허용된 필드만 업데이트할 수 있도록 필터링 적용
  • 예제 (Express.js + Mongoose)
const allowedFields = ["username", "email"];
const filteredData = {};
Object.keys(req.body).forEach(key => {
  if (allowedFields.includes(key)) {
    filteredData[key] = req.body[key];
  }
});
User.updateOne({ _id: req.user.id }, filteredData);

 

2. 민감한 필드 업데이트 제한

  • isAdmin, role, balance 등의 필드는 클라이언트에서 변경할 수 없도록 설정
  • 예제 (Django REST Framework)
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ["username", "email"]
        read_only_fields = ["isAdmin", "role"]

 

3. 객체에 직접 바인딩 금지(Manual Binding 적용)

  • update_attributes() 같은 자동 매핑 메서드 사용 금지
  • 예제 (Ruby on Rails)
class User < ApplicationRecord
  attr_protected :isAdmin, :role
end

 

4. API 요청 검증 및 로깅 활성화

  • 허용되지 않은 필드가 포함된 요청을 차단하고 로그로 남김
  • 예제 (Nginx WAF 설정)
SecRule ARGS_NAMES "isAdmin|role|balance" "id:1234,deny,status:403"

 

5. 웹 애플리케이션 방화벽(WAF) 적용

  • WAF를 이용해 이상한 필드가 포함된 요청을 감지 및 차단

 

6. 정기적인 보안 테스트 수행

  • OWASP ZAP, Burp Suite 등을 활용하여 API의 Mass Assignment 취약점 점검

📌 해시태그
#MassAssignment #웹보안 #API보안 #OWASP #권한상승 #계정탈취 #보안취약점 #정보보안

반응형