Skip to content

converted langflow exposedui to templated - #64

Closed
robert-doyensec wants to merge 4 commits into
masterfrom
langflow-exposedui-templated
Closed

converted langflow exposedui to templated#64
robert-doyensec wants to merge 4 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

Comment thread templated/templateddetector/plugins/exposedui/Langflow_ExposedUI.textproto Outdated
Co-authored-by: Giacomo Coluccelli <giacomo@doyensec.com>
@robert-doyensec

Copy link
Copy Markdown
Collaborator Author

Note: testbed PR at google/security-testbeds#243
Need to check if response code can be checked and retest with that change

@robert-doyensec
robert-doyensec marked this pull request as draft August 21, 2026 12:59
@robert-doyensec
robert-doyensec marked this pull request as ready for review August 26, 2026 16:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants