계: Environment

이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.

DNS Spoofing

Abstract
DNS 설정에 대한 외부 제어를 허용하면 서비스를 손상시키거나 응용 프로그램이 비정상적으로 동작할 수 있습니다.
Explanation
DNS 캐시 감염이라고도 알려진 DNS 스푸핑은 공격자가 DNS 확인자의 캐시를 손상시켜 잘못된 IP 주소를 반환하도록 하는 공격 유형입니다. 공격자는 DNS 스푸핑을 사용하여 사용자가 알지 못하는 사이에 사용자를 악성 웹 사이트로 리디렉션할 수 있습니다. Node.js를 사용하는 서버 쪽 JavaScript의 경우, DNS 서버 설정을 잘못 처리하면 보안 취약점이 발생할 수 있습니다.

예제 1: Node.js 응용 프로그램을 통해 사용자가 사용자 지정 DNS 서버를 지정할 수 있는 시나리오를 생각해 보십시오. 이 입력이 제대로 검증되고 정화되지 않으면 공격자가 악성 DNS 서버를 제공하고 DNS 스푸핑 공격을 구현할 수 있습니다.


const dns = require('dns');

// User-controlled input for DNS servers
const customDnsServers = from_user_controlled_input;

// Set custom DNS servers
dns.setServers(customDnsServers);


이 예제에서는 사용자 제어 입력에서 파생된 값이 customDnsServers 변수에 할당됩니다. 그런 다음 이 입력은 dns.setServers(customDnsServers)를 사용하여 DNS 서버를 설정하는 데 사용됩니다. 공격자가 악성 DNS 서버 주소를 제공하는 경우 응용 프로그램이 공격자의 서버를 사용하여 도메인 이름을 확인하도록 지시할 수 있으며, 이로 인해 잘못된 IP 주소가 반환될 수 있습니다.
desc.dataflow.javascript.dns_spoofing