RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
security:cve-2000-0649

Раскрытие внутреннего адреса CVE-2000-0649

Описание уязвимости

Что по этому поводу говорят в https://www.pcisecuritystandards.org/

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 из статьи на LinkedIn. Он всё ещё заблокирован на территории РФ, что несомненно сильно подрывает веру в адекватность людей причастных к законотворчеству.

Нормальный запрос

Здесь мы видим внутренний IP

Как проверить

Проверка через 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 (http-internal-ip-disclosure)

nmap --script http-internal-ip-disclosure foobar.com

Проверка с помощью скрипта на 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 <example.com> or <IP>\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

security/cve-2000-0649.txt · Последнее изменение: 2021/03/02 03:45 — 127.0.0.1