====== Раскрытие внутреннего адреса CVE-2000-0649 ====== Описание уязвимости * https://www.cvedetails.com/cve/CVE-2000-0649/ * https://www.securityfocus.com/bid/1499/info * https://blog.qualys.com/product-tech/2018/01/08/pci-dss-v3-2-private-ip-address-disclosure Что по этому поводу говорят в https://www.pcisecuritystandards.org/ {{:security:pci_dss_1.3.7.png?nolink|}} [[https://www.youtube.com/watch?v=4W_SGDfw3UY|PCI DSS Requirement 1.3.7 на Youtube]] TL;DR раскрытие внутренней адресации в вашей айти системе довольно опасно. Нормальный ответ сервера выглядит так HTTP/1.1 302 Moved Temporarily ... Location: https://foobar.com/amazing/ Ответ сервера с раскрытием внутреннего адреса HTTP/1.1 302 Moved Temporarily ... Location: https://10.10.13.37/foobar/ Я скопировал для наглядности примеры request/response из статьи на [[https://www.linkedin.com/pulse/internal-ip-host-name-disclosure-server-redirects-utkarsh-tiwari|LinkedIn]]. Он всё ещё заблокирован на территории РФ, что несомненно сильно подрывает веру в адекватность людей причастных к законотворчеству. Нормальный запрос {{:security:cve-2000-0649_good_response.jpg?nolink|}} Здесь мы видим внутренний IP {{:security:cve-2000-0649_bad_response.jpg?nolink|}} ===== Как проверить ===== Проверка через curl curl -v -I --http1.0 http[s]://foobar.com/index.php -k -H 'Host:' Проверка через openssl openssl s_client -host foobar.com -port 443 GET / HTTP/1.0 Проверка через telnet telnet foobar.com 443 GET / HTTP/1.0 Проверка через nmap ([[https://nmap.org/nsedoc/scripts/http-internal-ip-disclosure.html|http-internal-ip-disclosure]]) nmap --script http-internal-ip-disclosure foobar.com Проверка с помощью [[https://github.com/rafaelh/CVE-2000-0649|скрипта на python]] (см. ниже) ++++ Показать/Скрыть | #!/usr/bin/env python3 # Written by Rafe Hart (@rafael_hart) """ Test an IP address (port 443) for CVE-2000-0649 """ import ssl import socket import re import sys def main(): if len(sys.argv) == 1: print("\nUsage: cve-2000-0643.py or \n") sys.exit(1) target = sys.argv[1] s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((target, 443)) s = ssl.wrap_socket(s, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_SSLv23) s.sendall(b'GET / HTTP/1.0\r\n\r\nConnection: close\r\n\r\n') except socket.error as exc: print("Did't work: %s" % exc) while True: new = s.recv(4096) if not new: s.close() break try: response = new.decode() pattern = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})') if pattern.search(response): print(target, "->", pattern.search(response).group()) except: sys.exit(1) if __name__ == '__main__': main() ++++ ===== Как исправить в nginx ===== [[http://nginx.org/ru/docs/http/ngx_http_core_module.html#server_name_in_redirect|Модуль ngx_http_core_module / server_name_in_redirect]] Установить server_name_in_redirect on EOM {{tag>linux debian безопасность pci_dss cve nginx}}