Skip to content

converted langflow exposedui to templated#64

Open
robert-doyensec wants to merge 2 commits into
masterfrom
langflow-exposedui-templated
Open

converted langflow exposedui to templated#64
robert-doyensec wants to merge 2 commits into
masterfrom
langflow-exposedui-templated

Conversation

@robert-doyensec

Copy link
Copy Markdown
Collaborator

testbed changes at doyensec/security-testbeds#44
detects both the exposedui and cve.

{
  "scanStatus": "SUCCEEDED",
  "scanFindings": [{
    "targetInfo": {
      "networkEndpoints": [{
        "type": "IP_HOSTNAME_PORT",
        "ipAddress": {
          "addressFamily": "IPV4",
          "address": "192.168.65.254"
        },
        "port": {
          "portNumber": 8081
        },
        "hostname": {
          "name": "host.docker.internal"
        }
      }]
    },
    "networkService": {
      "networkEndpoint": {
        "type": "IP_HOSTNAME_PORT",
        "ipAddress": {
          "addressFamily": "IPV4",
          "address": "192.168.65.254"
        },
        "port": {
          "portNumber": 8081
        },
        "hostname": {
          "name": "host.docker.internal"
        }
      },
      "transportProtocol": "TCP",
      "serviceName": "http",
      "serviceContext": {
        "webServiceContext": {
        }
      }
    },
    "vulnerability": {
      "mainId": {
        "publisher": "TSUNAMI_COMMUNITY",
        "value": "LANGFLOW_EXPOSEDUI"
      },
      "severity": "CRITICAL",
      "title": "Langflow Exposed UI",
      "description": "The scanner detected a Langflow instance without proper authentication. Langflow allows users to customize components by writing Python code. Exposing it without proper authentication introduces a risk of remote code execution (RCE).\n",
      "recommendation": "Disable the auto-login feature setting the ENABLE_AUTO_LOGIN environment variable to False. Instructions are available in the official documentation: https://docs.langflow.org/configuration-authentication#langflow_auto_login"
    }
  }, {
    "targetInfo": {
      "networkEndpoints": [{
        "type": "IP_HOSTNAME_PORT",
        "ipAddress": {
          "addressFamily": "IPV4",
          "address": "192.168.65.254"
        },
        "port": {
          "portNumber": 8081
        },
        "hostname": {
          "name": "host.docker.internal"
        }
      }]
    },
    "networkService": {
      "networkEndpoint": {
        "type": "IP_HOSTNAME_PORT",
        "ipAddress": {
          "addressFamily": "IPV4",
          "address": "192.168.65.254"
        },
        "port": {
          "portNumber": 8081
        },
        "hostname": {
          "name": "host.docker.internal"
        }
      },
      "transportProtocol": "TCP",
      "serviceName": "http",
      "serviceContext": {
        "webServiceContext": {
        }
      }
    },
    "vulnerability": {
      "mainId": {
        "publisher": "GOOGLE",
        "value": "CVE-2025-3248"
      },
      "relatedId": [{
        "publisher": "CVE",
        "value": "CVE-2025-3248"
      }],
      "severity": "CRITICAL",
      "title": "Remote code execution affecting Langflow (CVE-2025-3248)",
      "description": "Vulnerable Langflow versions are susceptible to code injection in the code validation endpoint. A remote and unauthenticated attacker can send crafted HTTP requests from this endpoint to execute arbitrary Python code.",
      "recommendation": "Update the version to 1.3.0 or later with the authentication option enabled."
    }
  }],
  "scanStartTimestamp": "2026-06-26T14:48:45.818Z",
  "scanDuration": "6.466s",
  "fullDetectionReports": {
    "detectionReports": [{
      "targetInfo": {
        "networkEndpoints": [{
          "type": "IP_HOSTNAME_PORT",
          "ipAddress": {
            "addressFamily": "IPV4",
            "address": "192.168.65.254"
          },
          "port": {
            "portNumber": 8081
          },
          "hostname": {
            "name": "host.docker.internal"
          }
        }]
      },
      "networkService": {
        "networkEndpoint": {
          "type": "IP_HOSTNAME_PORT",
          "ipAddress": {
            "addressFamily": "IPV4",
            "address": "192.168.65.254"
          },
          "port": {
            "portNumber": 8081
          },
          "hostname": {
            "name": "host.docker.internal"
          }
        },
        "transportProtocol": "TCP",
        "serviceName": "http",
        "serviceContext": {
          "webServiceContext": {
          }
        }
      },
      "detectionTimestamp": "2026-06-26T14:48:52.247Z",
      "detectionStatus": "VULNERABILITY_VERIFIED",
      "vulnerability": {
        "mainId": {
          "publisher": "TSUNAMI_COMMUNITY",
          "value": "LANGFLOW_EXPOSEDUI"
        },
        "severity": "CRITICAL",
        "title": "Langflow Exposed UI",
        "description": "The scanner detected a Langflow instance without proper authentication. Langflow allows users to customize components by writing Python code. Exposing it without proper authentication introduces a risk of remote code execution (RCE).\n",
        "recommendation": "Disable the auto-login feature setting the ENABLE_AUTO_LOGIN environment variable to False. Instructions are available in the official documentation: https://docs.langflow.org/configuration-authentication#langflow_auto_login"
      }
    }, {
      "targetInfo": {
        "networkEndpoints": [{
          "type": "IP_HOSTNAME_PORT",
          "ipAddress": {
            "addressFamily": "IPV4",
            "address": "192.168.65.254"
          },
          "port": {
            "portNumber": 8081
          },
          "hostname": {
            "name": "host.docker.internal"
          }
        }]
      },
      "networkService": {
        "networkEndpoint": {
          "type": "IP_HOSTNAME_PORT",
          "ipAddress": {
            "addressFamily": "IPV4",
            "address": "192.168.65.254"
          },
          "port": {
            "portNumber": 8081
          },
          "hostname": {
            "name": "host.docker.internal"
          }
        },
        "transportProtocol": "TCP",
        "serviceName": "http",
        "serviceContext": {
          "webServiceContext": {
          }
        }
      },
      "detectionTimestamp": "2026-06-26T14:48:46.754Z",
      "detectionStatus": "VULNERABILITY_VERIFIED",
      "vulnerability": {
        "mainId": {
          "publisher": "GOOGLE",
          "value": "CVE-2025-3248"
        },
        "relatedId": [{
          "publisher": "CVE",
          "value": "CVE-2025-3248"
        }],
        "severity": "CRITICAL",
        "title": "Remote code execution affecting Langflow (CVE-2025-3248)",
        "description": "Vulnerable Langflow versions are susceptible to code injection in the code validation endpoint. A remote and unauthenticated attacker can send crafted HTTP requests from this endpoint to execute arbitrary Python code.",
        "recommendation": "Update the version to 1.3.0 or later with the authentication option enabled."
      }
    }]
  },
  "reconnaissanceReport": {
    "targetInfo": {
      "networkEndpoints": [{
        "type": "IP_HOSTNAME_PORT",
        "ipAddress": {
          "addressFamily": "IPV4",
          "address": "192.168.65.254"
        },
        "port": {
          "portNumber": 8081
        },
        "hostname": {
          "name": "host.docker.internal"
        }
      }]
    },
    "networkServices": [{
      "networkEndpoint": {
        "type": "IP_HOSTNAME_PORT",
        "ipAddress": {
          "addressFamily": "IPV4",
          "address": "192.168.65.254"
        },
        "port": {
          "portNumber": 8081
        },
        "hostname": {
          "name": "host.docker.internal"
        }
      },
      "transportProtocol": "TCP",
      "serviceName": "http",
      "serviceContext": {
        "webServiceContext": {
        }
      }
    }]
  },
  "targetAlive": true
}

@giacomo-doyensec giacomo-doyensec left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, only question is if its fine to wait for OOB without checking for the response status, if authz blocks with 403 it could bailout earlier, but I'm not sure how straightforward is to achieve that with the current version of the templating engine


# OOB version. The original plugin also had reflective, but response is not returned unless OOB.
# Removed reflective version to prevent false positives.
# Also changed payload to use requests.get(...) instead of subprocess RCE.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Also changed payload to use requests.get(...) instead of subprocess RCE.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants