Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-48710 — CVE-2026-48710漏洞验证代码 | Kitploit
Outils/GitHubGitHub/cuteecat/cve-2026-48710
Authentication & AuthorizationVulnerability AnalysisWeb Application ExploitationWeb Security
GitHubcuteecat/cve-2026-48710

CVE-2026-48710

CVE-2026-48710漏洞验证代码

Voir le dépôt
il y a 9 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-48710

Principe :

Starlette est un framework ASGI Python open source et léger.
Cela provient du fait que le framework Starlette, dans le traitement de la structure de données url, fait confiance au host envoyé par le client et le concatène directement dans la variable url pour le traitement d'authentification ultérieur.

L'URL d'origine est traitée par uvicorn\protocols\http\httptools_impl.py
def on_message_begin(self) -> None: self.url = b"" self.expect_100_continue = False self.headers = [] self.scope = { "type": "http", "asgi": {"version": self.asgi_version, "spec_version": "2.3"}, "http_version": "1.1", "server": self.server, "client": self.client, "scheme": self.scheme,
"root_path": self.root_path, "headers": self.headers, "state": self.app_state.copy(), }

root@kitploit:~
# Parser callbacks
def on_url(self, url: bytes) -> None:
    self.url += url #self.url设置为原始url

def on_header(self, name: bytes, value: bytes) -> None:
    name = name.lower()
    if name == b"expect" and value.lower() == b"100-continue":
        self.expect_100_continue = True
    self.headers.append((name, value))

def on_headers_complete(self) -> None:
    http_version = self.parser.get_http_version()
    method = self.parser.get_method()
    self.scope["method"] = method.decode("ascii")
    if http_version != "1.1":
        self.scope["http_version"] = http_version
    if self.parser.should_upgrade() and self._should_upgrade():
        return
    parsed_url = httptools.parse_url(self.url)#使用httptools拆分原始url
    raw_path = parsed_url.path  #raw_path设置为原始url拆分出的path(访问的path)
    path = raw_path.decode("ascii")  #path设置为使用ascii解码以后的原始path值
    if "%" in path:  #处理url解码以后的中文从重编码
        path = urllib.parse.unquote(path)
    full_path = self.root_path + path
    full_raw_path = self.root_path.encode("ascii") + raw_path
    self.scope["path"] = full_path
    self.scope["raw_path"] = full_raw_path
    self.scope["query_string"] = parsed_url.query or b""

(Commentaire que j'ai saisi à la main)

Ce code se trouve dans la méthode de la classe URL.

Code : \starlette\datastructures.py

host_header = None for key, value in scope["headers"]: if key == b"host": host_header = value.decode("latin-1") break if host_header is not None: url = f"{scheme}://{host_header}{path}" #基于用户传入的请求头二次定义url

Dans starlette\routing.py :

root@kitploit:~
    route_path = get_route_path(scope)
    if scope["type"] == "http" and self.redirect_slashes and route_path != "/":
        redirect_scope = dict(scope)
        if route_path.endswith("/"):
            redirect_scope["path"] = redirect_scope["path"].rstrip("/")
        else:
            redirect_scope["path"] = redirect_scope["path"] + "/"

        for route in self.routes:
            match, child_scope = route.matches(redirect_scope)
            if match != Match.NONE:
                redirect_url = URL(scope=redirect_scope)   #调用URL方法
                response = RedirectResponse(url=str(redirect_url))
                await response(scope, receive, send)
                return

Cela permet à un utilisateur d'envoyer une requête malformée avec l'en-tête host vers un point d'extrémité nécessitant une authentification. Au niveau du routage, l'URL est redéfinie comme un point d'extrémité ne nécessitant pas d'authentification.
Par exemple, avec http://127.0.0.1:9999/admin
Dans cette URL, admin est un point d'extrémité qui nécessite une authentification.
Envoi du paquet de données :
url = http://127.0.0.1:9999/admin
header{
host = 123?
}
L'URL est alors redéfinie comme http://123?/admin
À ce moment, en utilisant la fonction urlsplit pour analyser l'URL :
Résultat : SplitResult(scheme='http', netloc='123', path='', query='/admin', fragment='')
Parce que path='', l'authentification ultérieure considère que l'utilisateur accède à la racine du site, donc la requête est directement autorisée, alors que le contenu du répertoire admin est réellement renvoyé.

Télécharger l’outil