JavaScript에서 Maht.random값을 사용하니 CWE-330, CWE-338에 대한 보안취약점이 있다는 것을 알게 되었다.
GPT는 해당 코드에 대해 다음과같이 설명하고 있다.
CWE-330은 "Small Cryptographic Nonce"라고 알려진 보안 취약점입니다. 이 취약점은 암호학적으로 무작위로 생성되는 nonce(한 번만 사용되는 임의의 숫자)의 크기가 작아서 예측 가능하거나 재사용될 수 있는 경우 발생합니다. nonce는 주로 보안 프로토콜이나 키 생성 등에서 사용되며, 예측 가능하거나 재사용될 경우 보안성이 크게 저하될 수 있습니다.
CWE-338은 "Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)"라고 알려진 보안 취약점입니다. 이 취약점은 보안 관련 작업에서 약한 암호학적 난수 생성기를 사용할 때 발생합니다
즉, 해당 함수는 공격자가 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격할 수 있다라는 것이다.
따라서 예측하기 어려운 숫자를 생성해야 하는데 다음과 같은 방법으로 대체 가능하다.
let uint32Array = new Uint32Array(1);
// Web Crypto API를 사용하여 암호학적 PRNG로 임의의 숫자를 생성
window.crypto.getRandomValues(uint32Array);
const randomNumber = uint32Array[0] / (Math.pow(2, 32));
print(randomNumber);
unit32Array의 첫번째 값을 사용하면 정수가 반환되므로
Math.random의 결과값과 유사한 값을 받기 위해서는 Math.pow를 사용하여 출력하면 된다.
'웹' 카테고리의 다른 글
javascript 해당 월의 주차, 시작일과 종료일 구하기 (626) | 2023.12.27 |
---|---|
data pivot 데이터 피벗만들기. feat rxjs (256) | 2023.12.18 |
Canvas Antialiasing 선명도 높이기 (6) | 2022.02.16 |
spring boot에서 transaction 사용하기 (2) | 2021.01.15 |
댓글