json.stringify - 안전하지 않은 역직렬화

 JSON.stringify: 안전하지 않은 역직렬화로 이어지는 경우

JSON.stringify가 겉보기처럼 무해하지 않은 이유

개발자들은 데이터를 직렬화하고, 객체를 네트워크로 전송하고, 파일에 상태를 저장하고, 설정을 영구 저장하기 위해 매일 JSON.stringify를 사용합니다. 하지만 겉보기에는 무해해 보이는 JSON.stringify 호출이 유효성 검사 없이 나중에 데이터를 다시 불러올 경우 안전하지 않은 역직렬화를 초래할 수 있습니다.

문제는 JSON.stringify 자체에 있는 것이 아니라, 우리가 그것을 잘못 사용하는 방식에 있습니다. 복잡한 객체(특히 프로토타입이나 클래스 인스턴스가 포함된 객체)를 직렬화한 후, 나중에 JSON.stringify를 사용하여 제대로 확인하지 않고 역직렬화하는 경우입니다. JSON.파싱이렇게 하면 악성 페이로드가 애플리케이션 내에서 실행될 위험이 있습니다.

자바스크립트에서는 직렬화된 데이터가 "단순히" 안전하다고 쉽게 생각할 수 있습니다. JSON하지만 JSON은 데이터가지 논리가 아닙니다. 공격자가 해당 데이터를 제어하게 되면 코드의 신뢰 경계를 악용할 수 있습니다. 바로 여기서 안전하지 않은 역직렬화가 시작됩니다.

개발자들이 흔히 저지르는 실수로 인해 안전하지 않은 역직렬화가 발생합니다.

안전하지 않은 역직렬화는 대개 코드 리뷰에서는 무해해 보이는 습관에서 비롯됩니다. 하지만 JSON.stringify를 부주의하게 사용하면 문제가 발생할 수 있습니다. 공격 표면이 확장됩니다.

안전하지 않은 관행: 유효성 검사를 거치지 않은 사용자 입력을 직렬화하는 것

⚠️경고: 이 패턴은 공격자가 제어하는 ​​입력을 유효성 검사 없이 직렬화합니다. 따라서 나중에 해당 데이터가 신뢰할 만한 것으로 판명될 경우 역직렬화 과정에서 보안이 취약해질 수 있습니다.

⚠️경고: 유효성 검사 없이 동일한 데이터를 역직렬화하면 페이로드가 앱에 다시 유입될 수 있습니다.

위험한 패턴: 신뢰 경계를 넘어 JSON을 재사용하는 것

개발 환경에서 생성된 직렬화된 JSON 데이터가 유효성 검사 없이 다른 운영 환경에서 재사용되는 경우가 있습니다. 이러한 상황은 내부 도구나 마이크로서비스에서 흔히 발생합니다.

파이썬을 이용한 무음 위험 예시:

⚠️경고: 아래의 직렬화 및 역직렬화 단계는 유효성 검사 없이 잠재적으로 신뢰할 수 없는 데이터를 처리합니다.

두 예제 모두 스키마 강제 없이 사용자 제어 데이터를 직렬화 및 역직렬화합니다. 이는 부주의한 JSON.stringify 사용으로 인해 발생하는 안전하지 않은 역직렬화 취약점의 온상이 될 수 있습니다.

실제 위험 Pipelines: 코드에서 CI/CD 역직렬화 흐름

이제 그러한 행동을 생각해 보세요. pipeline. JSON.stringify가 잘못 사용될 경우 CI/CD 워크플로를 사용하면 빌드 프로세스가 안전하지 않은 역직렬화 위험에 노출될 수 있습니다. 이는 아티팩트 메타데이터, 테스트 픽스처 및 구성 스냅샷에서 자주 발생합니다.

공통의 CI/CD 함정:

  • 안전하지 않은 아티팩트 생성: 빌드 아티팩트에 직렬화된 객체가 포함되어 있으며, 이러한 객체는 유효성 검사 없이 여러 작업에서 재사용됩니다.
  • 직렬화된 환경 변수: 팀은 환경 변수를 직렬화된 JSON 형식으로 저장하고 여러 단계 또는 프로젝트에서 재사용합니다.
  • 주입된 테스트 데이터: 신뢰할 수 없는 출처에서 역직렬화된 테스트 데이터 commits 또는 분기는 유형 검사 없이 실행됩니다.

이러한 패턴은 공격자가 신뢰할 수 있는 시스템에 악성 코드를 쉽게 주입할 수 있도록 합니다. pipeline조작된 JSON 문자열화 로직을 사용합니다.

⚠️경고:이 워크플로는 유효성 검사 없이 직렬화된 데이터를 전달합니다. test-runner.js가 입력값을 검증하지 않으면 안전하지 않은 역직렬화 위험이 발생할 수 있습니다.

If 테스트러너.js 유효성 검사 없이 JSON을 로드하고 구문 분석하면 안전하지 않은 역직렬화가 발생할 수 있습니다.

JSON 보안 강화: stringify를 사용하여 유효성 검사 및 안전한 구문 분석 기능을 제공합니다.

해결책은 JSON.stringify를 아예 사용하지 않는 것이 아니라, 신중하게 사용하고 보안 검사를 일관되게 적용하는 것입니다. 제대로 처리하면 안전하지만, 현대의 보안 환경에서는 그렇지 않습니다. pipeline가정은 빠르게 무너진다.

DevSecOps 실무를 통해 보안을 강화하세요 JSON.stringify:

  • JSON 스키마를 사용하여 직렬화 및 역직렬화된 데이터의 유효성을 검사합니다.
  • 엄격한 타입 지정을 시행하고, 덕 타이핑이나 객체 모양에 대한 추측을 피하십시오.
  • 스키마 강제 또는 타입 가드를 지원하는 안전한 구문 분석 라이브러리를 사용하십시오.
  • 직렬화된 데이터는 신뢰할 수 있는 저장소에서 가져온 것이라 하더라도 신뢰할 수 없는 것으로 취급하십시오.
  • 악기 pipeline위험한 JSON.stringify 패턴을 조기에 포착하기 위한 것입니다.

모범 사례: 이 예제는 안전하지 않은 역직렬화를 방지하기 위해 JSON 스키마 유효성 검사를 사용합니다. 예제 사용 ajv Node.js에서:

안전한 역직렬화는 유효성 검사를 의미합니다. 전에 JSON을 맹목적으로 신뢰하지 마세요. stringify는 기본적으로 안전을 보장하지만, 안전의 기준은 직접 정의해야 합니다.

Xygeni를 이용한 시리얼화 위험 감지

수동 감사로는 모든 것을 잡아낼 수 없습니다. 제니 JSON.stringify가 코드베이스 전체에서 어떻게 사용되는지 파악할 수 있도록 해줍니다. pipelines.

Xygeni의 역할:

  • 추적 JSON.stringify 소스 코드부터 배포까지의 사용 과정.
  • 특히 마이크로서비스 전반에 걸쳐 안전하지 않은 역직렬화 흐름을 감지합니다. pipeline 단계.
  • 환경 변수, 사용자 입력 또는 아티팩트와 같은 안전하지 않은 데이터의 직렬화를 경고합니다.
  • 패턴 편차에 대한 알림은 직렬화된 데이터의 형태가 변경되거나 신뢰 경계를 넘어설 때를 보여줍니다.

이러한 가시성은 특히 JSON.stringify로 인해 발생하는 불안정한 역직렬화 위험을 처리할 때 매우 중요합니다. CI/CD 직렬화된 데이터가 빠르고 조용하게 전송되는 시스템.

JSON 보안. stringify: Your Shield 안전하지 않은 역직렬화에 대한 방어

JSON.stringify 자체는 안전하지 않은 함수가 아닙니다. 하지만 주의 없이 사용하면 안전하지 않은 역직렬화로 이어질 수 있습니다.

JSON을 사용하는 개발자라면:

  • 여러 서비스에 걸쳐 사용량을 감사하십시오. pipeline그리고 도구들.
  • 역직렬화된 데이터는 신뢰할 수 없는 것으로 취급하십시오.
  • 스키마 유효성 검사를 적용하고, 유형 지정을 강제하며, 보안을 통합하십시오. CI/CD.

모범 사례에만 머무르지 말고, Xygeni를 사용하여 프로덕션 환경에 도달하기 전에 안전하지 않은 역직렬화 위험을 추적, 감지 및 차단하십시오. 직렬화는 중립적이지 않습니다. 이를 활용하세요. JSON. 문자열화 안전한.

sca-tools-software-composition-analysis-tools
소프트웨어 위험을 우선순위화하고, 해결하고, 보호하십시오.
무료 계정을 만드세요.
신용 카드가 필요하지 않습니다.

소프트웨어 개발 및 제공을 안전하게 보호하세요

Xygeni 제품군과 함께