Axios 0.x 버전 보안 취약점으로 1.x 버전으로 업데이트 하기

2023.11.08일에 Axios v0.8.1 ~ v1.5.1 버전에서 XSRF-TOKEN이 X-XSRF-TOKEN 헤더에 포함되어 매 요청마다 보내져 공격자에게 보여질 수 있는 CVE가 공개되었다.
위 이슈로 인해 현재 해당 보안 취약점이 해결되었으며, 안정화된 Release 버전인 1.6.4로 업데이트를 진행하였다.
Axios XSRF-TOKEN 취약성 업데이트 | DevelopersIO
2023/11/08 일자로 Axios v0.8.1 ~ v1.5.1 버전에서 XSRF-TOKEN이 X-XSRF-TOKEN 헤더에 포함되어 매 요청마다 보내져 공격자에게 보여질 수 있는 CVE가 공개되었습니다. 대응 방법과 일어난 이유 XSRF-TOKEN 이 무엇
dev.classmethod.jp
기존 Axios 0.21.1 버전에서 1.6.4 버전으로 업데이트 하는 것은 Major 버전을 올리는 것이기 때문에 기존 소스 코드의 많은 부분을 수정해야 할 수도 있는 상황이라 우선적으로 1.x 버전 업데이트 리뷰나 트러블슈팅, Axios 공식 홈페이지, Github 등을 충분히 리서치하며 현재 프로젝트에 적용했을 때 발생할 수 있는 주요 이슈에 대해 대부분 파악했다.

Axios 사용 방법
axios 라이브러리를 사용하는 방법은 크게 두가지가 있다.
1. CDN을 통해 script로 선언하는 방법
가장 많이 사용하는 방법으로 <script> 태그만 추가하면 되므로 매우 간편하게 사용할 수 있고, 빠른 초기 로드 시간과 브라우저 캐싱, 쉬운 업데이트 등의 장점이 있다.
즉, 빠른 설정과 로드 속도가 중요한 경우, 그리고 최신 버전의 지속적인 업데이트가 필요한 경우 적합하다.
1. npm에서 axios 패키지 다운로드
$ npm install axios
2. script 선언
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
https://axios-http.com/kr/docs/intro
2. 파일을 다운로드하여 프로젝트에 삽입하는 방법
이 방법은 현재 프로젝트에서 사용한 방법으로 cdn 서버에 의존성이 없어 독립적이며, 로컬에 파일을 직접 저장하여 사용하기 때문에 보안성 측면에서도 좋을 수 있고 특정 버전의 파일을 사용하므로 버전 관리가 명확하여 업데이트로 인한 이슈 발생을 막을 수 있다는 장점이 있다.
Axios Github
https://github.com/axios/axios/releases/tag/v1.6.4
Release Release v1.6.4 · axios/axios
Release notes: Bug Fixes security: fixed formToJSON prototype pollution vulnerability; (#6167) (3c0c11c) security: fixed security vulnerability in follow-redirects (#6163) (75af1cd) Contributors ...
github.com
위의 Github 링크에서 Source code(zip) 파일을 다운로드 받으면 axios-1.6.4.zip\axios-1.6.4\dist\ 경로에 axios.js 파일과 axios.js.map 파일이 있다. 이 두개의 파일을 프로젝트에 삽입하여 주면된다.
src/main/resources/ or ~/webapp/ 해당 경로 밑에 삽입해주고 disk reload 해주면 끝이다.
(삽입 위치는 프로젝트 환경에 따라 변경될 수 있음)
// 이렇게 Axios 함수 바로 사용 가능하다.
axios.get("url")
.then(function (response) {
// response
}).catch(function (error) {
// 오류발생시 실행
}).then(function() {
// 항상 실행
});
프로젝트 개발 환경에 따라 다를 수 있지만.. 일단 결과적으로 현재 프로젝트에 적용했을 때 특별히 이슈가 발생하지 않고 정상적으로 동작했다.
v.1.0.0-alpha 문서 확인 결과 major version 0.x -> 1.x로 변경하여도 기존 소스코드에 영향 없이 0.x버전의 방식들도 사용할 수 있다고 한다.
주요 업데이트는 CancleToken, Interceptor, Error, Security 등이 있는 것 같다.
v1.0.0-alpha.1 · axios axios · Discussion #4761
[1.0.0] - 2022-05-30 Added Added stack trace to AxiosError #4624 Add AxiosError to AxiosStatic #4654 Replaced Rollup as our build runner #4596 Added generic TS types for the exposed toFormData help...
github.com
추가됨 (Added)
- AxiosError #4624 에 스택 추적을 추가했습니다.
- AxiosStatic #4654 에 AxiosError 추가
- 빌드 실행기로 Rollup을 대체했습니다 #4596
- 노출된 toFormData 도우미에 대한 일반 TS 유형을 추가했습니다. #4668
- 수신 콜백 함수 #4096을 추가했습니다.
- PNPM #4207을 사용한 설치 지침이 추가되었습니다.
- AbortController 폴리필 #4229 가져오기를 방지하기 위해 일반 AxiosAbortSignal TS 인터페이스를 추가했습니다.
- ECOSYSTEM.md #4238 에 axios-url-template을 추가했습니다.
- 사용자가 모든 인터셉터가 axios 인스턴스 #4248 에서 제거되었는지 확인할 수 있도록 요청 및 응답 인터셉터 객체에clear() 함수를 추가했습니다.
- 반응 후크 플러그인 #4319를 추가했습니다.
- 변환 응답 #4580 에 대한 HTTP 상태 코드 추가
- 브라우저에서 지원하는 프로토콜 목록에 blob을 추가했습니다. #4678
- 리디렉션 #4436 에서 환경에서 프록시 확인
- 추가 옵션 4704를 사용하여 향상된 toFormData 구현을 추가했습니다.
- 취소기 매개변수 구성 및 요청 추가 #4711
- application/x-www-form-urlencoded #4714 에 자동 페이로드 직렬화를 추가했습니다.
- 웹팩 사용자가 내장 기능을 덮어쓸 수 있는 기능 추가 #4715
- AxiosRequestHeaders 유형 #4322 에 string[]을 추가했습니다.
- formSerializer 구성 #4721을 준수하기 위해 url-encoded-form 직렬 변환기에 대한 기능을 추가했습니다.
- isCancel 유형 어설션 #4293을 추가했습니다.
- node.js #4725 에 대한 데이터 URL 지원이 추가되었습니다.
- 진행 이벤트 콜백 유형 추가 #4675
- URL 매개변수 직렬 변환기 #4734
- axios.formToJSON 메서드 #4735를 추가했습니다.
변경됨 (Changed)
- 유형 정의 #4665 에서 AxiosError.config를 선택 사항으로 업데이트했습니다.
- 다른 솔루션보다 URLSearchParam 내장 인터페이스를 강조하는 README가 업데이트되었습니다. #4590
- CanceledError 인스턴스를 생성할 때 요청 및 구성 포함 #4659
- 필요에 따라 func-names eslint 규칙을 변경했습니다. #4492
- substr()이 더 이상 사용되지 않으므로 더 이상 사용되지 않는 substr()을 Slice()로 교체합니다. #4468
- HTTPS #4387을 사용하도록 README.md의 HTTP 링크 업데이트
- 더 나은 Trim() 폴리필 #4072 로 업데이트되었습니다.
- 인스턴스 생성 시 부분 기본 헤더를 지정할 수 있도록 유형이 업데이트되었습니다. #4185
- 확장된 isAxiosError 유형 #4344
- axios 인스턴스 메소드에 대한 유형 정의 업데이트 #4224
- 업데이트된 eslint 구성 #4722
- 업데이트된 문서 #4742
제거됨 (Removed)
- NetworkError 생성자 #4656 에 대한 잘못된 인수가 제거되었습니다.
- 웹팩 #4596 제거됨
- 인수를 배열 #4544 로 변환하는 함수가 제거되었습니다 .
결정된 (Fixed)
- README #4649 의 문법 수정
- README #4599 의 코드 오류 수정
- 취소 확인 코드 최적화 #4587
- README #4532 에서 defaults.js를 가리키는 URL 수정
- AxiosPromise #4505 에는 인터페이스 대신 유형 별칭을 사용하세요.
- 코드 주석의 일부 단어 철자와 린트 스타일 수정 #4500
- Chrome, FireFox 및 Safari의 업데이트된 브라우저 아이콘 3개로 추가 정보 편집 #4414
- 1.14.9에서 1.15.0으로의 범프 팔로우 리디렉션 #4673
- 어설션이 실패할 때 중단되지 않도록 http 테스트 수정 #4435
- AxiosRequestTransformer #4201 에 대한 TS 정의 수정
- README #4232 의 문법 문제 수정
- instance.defaults.headers 유형 #4557 수정
- 즉시 요청 취소 시 경쟁 조건 수정 #4261
- 콘텐츠가 없을 때 Z_BUF_ERROR 수정 #4701
- 리디렉션 회귀 전 프록시 수정 #4708
- AxiosError 상태 코드 유형 #4717을 수정했습니다.
- AxiosError 스택 캡처 #4718 수정
- AxiosRequestHeaders 입력 수정 #4334
- 최대 본체 길이 기본값 수정 #4731
- node>v17 #4728 의 FormData Blob 문제를 수정했습니다.
- 1.5.2에서 1.5.3으로 범프 그런트 #4743
- 콘텐츠 유형 헤더 반복 수정 #4745
- http 4738 에 대한 수정된 시간 초과 오류 메시지
보안 (Security)
- SECURITY.md #4687 업데이트
- 끝 -