Node.js url.parse() 취약점 컨트리뷰션
표상영 토스 · 토스 기술 블로그
AI 핵심 요약
Node.js의 레거시 url.parse()가 WHATWG URL API와 다르게 hostname을 파싱해 도메인 검증을 우회할 수 있는 Hostname Spoofing 취약점이 발견됐습니다. 예를 들어 검증에는 WHATWG 파서를, 실제 요청에는 url.parse()를 사용하는 경우 파싱 결과가 달라져 임의 도메인으로 요청하는 SSRF가 발생할 수 있습니다. 작성자는 Node.js에 취약점을 제보하고 패치 논의에 참여해, 허용 문자 화이트리스트를 Reserved Characters 차단 방식으로 바꾸고 url.parse()를 Deprecated 처리하도록 기여했습니다. 수정 사항은 v19.1.0과 v18.13.0에 반영됐으며, URL 검증에서는 실제 요청에 사용되는 파서와 검증 파서의 일관성이 중요하다는 점을 보여줍니다.
- URL 검증과 실제 요청에 서로 다른 파서를 쓰면 hostname 해석 차이로 검증이 우회될 수 있습니다.
- 외부 입력 URL을 서버에서 가져오는 기능은 SSRF로 이어질 수 있으므로 파싱과 검증 경로를 함께 점검해야 합니다.
- Node.js 패치는 허용 문자 화이트리스트 대신 URI의 Reserved Characters를 차단하는 방식으로 hostname 검사를 강화했습니다.
- 취약점이 수정된 버전은 Node.js v19.1.0과 v18.13.0이며, url.parse()는 Deprecated 처리됐습니다.
소개
토스 보안기술팀은 안전한 금융 서비스를 제공하기 위한 연구를 수행하고 있어요. 많은 서비스에서 사용되고 있는 Node.js의 취약점을 분석하고 안전하게 패치될 수 있도록 기여했던 과정을 소개드려요.
비슷한 학습 자료
컨퍼런스 SLASH
비대면으로 더 똑똑하게 대출 서류를 발급할 수 없을까요? 웹뷰에서 Nest.js 서버를 띄워 토스뱅크의 대출 서비스에 적용한 사례를 나눕니다. 박진수 / Node.js Platform Team Leader 토스 개발자 컨퍼런스 SLASH에 대한 자세한 정보는 👉🏻 https://toss.im/slash-24 컨퍼런스 및 세션에 대한 문의는 👉🏻 slash@toss.im 토스에 합류하고 싶다면 👉🏻 https://toss.im/career/jobs #토스 #개발자컨퍼런스 #SLASH #SLASH24 #nodejs #nestjs #토스뱅크 유의 사항 *본 발표자료의 저작권은 연사에 있으며, 저작권자의 사전 서면 동의 없이 자료의 일부 또는 전부를 이용하거나 배포할 수 없습니다. *또한 해당 자료를 복제하여 SLASH 행사 홈페이지를 제외한 온라인상에 게재하는 행위는 연사가 동의한 저작권 및 배포전송권에 위배됩니다. *토스가 다루는 모든 개인정보는 고객에게 동의를...
백엔드 모바일 앱 개발
책 조현영 예스24
Node.js 교과서
책 조현영 예스24
Node.js 베스트셀러 1위! 개정 3판! 한 권으로 끝내는, 노드 기본부터 실무까지 전 과정 총망라! 다양한 서비스를 직접 만드는, 실무에 가장 가까운 강의! 개정 3판을 맞아 노드와 npm 패키지 버전을 최신으로 업데이트하고, 컨트롤러와 서비스를 분리해 사용하는 방식으로 예제 구조를 변경하면서 9~13장까지 모든 코드를 수정하며 완성도를 높였다. ES2022에 맞춰 Map/Set과 널 병합, 옵셔널 체이닝을 예제 코드 전반에 사용하고 관련 문법을 설명했으며, 정식 지원되는 ECMAScript 모듈 사용법도 추가했다. 또한, 요즘 적극적으로 도입되는 추세에 맞춰 노드 프로젝트를 타입스크립트로 전환하는 방법도 추가했다. 이 책은 프런트부터 서버, 데이터베이스, 배포까지 아우르는 광범위한 내용을 다룬다. 군더더기 없는 직관적인 설명으로 기본 개념을 확실히 이해하고, 노드의 기능과 생태계를 사용해보면서 실제로 동작하는 서버를 만들어보자. 웹 서버, 웹 API 서버, 노드 서비스 테스트...
백엔드 프로그래밍 언어 로드맵 1개에 담김
문서 조성륜
AST로 Outdated 없는 퍼널 문서 만들기
문서 박서진
똑똑하게 브라우저 Polyfill 관리하기
문서 박지우