본문 바로가기

📥 Private 배열에 Public 데이터 할당 - 실습 시뮬레이터

CWE-496: Public Data Assigned to Private Array-Typed Field

KISA 소프트웨어 보안약점 진단가이드(2021) · 캡슐화
💡 쉽게 말하면
외부가 준 배열을 그대로 보관하면, 그쪽이 나중에 고칠 때 내 것도 같이 바뀝니다. 복사해서 보관합니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 외부 참조 저장 식별
  • ⬜ 입력 복사
☕ Java 코드 에디터 취약한 코드
Config.java 💡 외부 배열은 clone()/복사 후 내부 필드에 저장하세요.
public class Config {
    private String[] roles;
    // [취약] 외부 배열 참조를 내부 필드에 그대로 저장 → 외부 변경에 노출
    public Config(String[] roles) {
        this.roles = roles;
    }
}
💡 수정 가이드 (KISA 기준)
1. 방어적 복사

입력을 복사 후 저장.

public Config(String[] roles) { this.roles = roles.clone(); // 입력 방어적 복사 }
📊 분석 결과 및 설명
🎯 목표

외부에서 받은 가변 배열은 복사하여 내부에 저장합니다.

⚠️ 현재 취약점

External Reference Stored

외부 참조 저장으로 내부 상태가 외부 변경에 노출됩니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 외부 참조 저장 식별
  • ⬜ 입력 복사
🐍 Python 코드 에디터 취약한 코드
config.py 💡 외부 리스트는 list()/[:]로 복사 후 저장하세요.
class Config:
    # [취약] 외부 리스트를 그대로 참조 저장 → 호출측 변경에 노출
    def __init__(self, roles):
        self._roles = roles
💡 수정 가이드 (KISA 기준)
1. 입력 복사

복사 후 저장.

def __init__(self, roles): self._roles = list(roles) # 입력 복사
📊 분석 결과 및 설명
🎯 목표

외부 가변 컬렉션은 복사하여 내부에 저장합니다.

⚠️ 현재 취약점

External Reference Stored

외부 참조 저장으로 내부 상태가 노출됩니다.

📰 실제 사고사례 & 표준 매핑
Public 데이터를 Private 배열에 그대로 할당해 외부 입력이 내부 상태를 오염시킬 수 있습니다.
🏷️ CWE-496
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류