Skip to content

ENH: auxiliary module for Flowise Authentication Bypass CVE-2025-58434 - #21757

Open
rmhowe425 wants to merge 8 commits into
rapid7:masterfrom
rmhowe425:dev/CVE-2025-58434
Open

ENH: auxiliary module for Flowise Authentication Bypass CVE-2025-58434#21757
rmhowe425 wants to merge 8 commits into
rapid7:masterfrom
rmhowe425:dev/CVE-2025-58434

Conversation

@rmhowe425

@rmhowe425 rmhowe425 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Description

This pull request adds a new auxiliary module that detects and exploits an authentication bypass vulnerability impacting Flowise versions up to and including 3.0.5

Related Issue:
Fixes #21756

Breaking Changes

None

Reviewer Notes

Verification Steps

  1. Install the application
  2. Start msfconsole
  3. Do: use exploit/multi/http/flowise_auth_bypass_cve-2025_58434
  4. Do: run lhost=<lhost> rhost=<rhost> email=<email> newpassword=<new password>
  5. You should get a status success message indicating that the new username and password have been stored to loot.

Test Evidence

Successful check and module run

image

Read data written by store_loot

image

Environment

Field Details
Operating System Ubuntu 22.04
Target Software/Hardware Flowise 3.0.4
Docker Image / Vagrant Setup flowiseai/flowise:3.0.4

AI Usage Disclosure

None

Pre-Submission Checklist

  • Included a corresponding documentation markdown file in documentation/modules (new modules only)
  • No sensitive information (IP addresses, credentials, API keys, hashes) in code or documentation
  • Tested on the target environment specified in the Environment section above
  • Included RSpec tests for library changes (encouraged for lib/ changes)
  • Read the CONTRIBUTING.md and module acceptance guidelines

@rmhowe425
rmhowe425 marked this pull request as ready for review August 7, 2026 01:10
},
'License' => MSF_LICENSE,
'Author' => [
'Richard howe <rhowe425>',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Would you mind giving credits to OG researchers? GHSA-wgpv-6j63-x5ph

'uri' => normalize_uri(target_uri.path, 'api/v1/version')
})

unless res && res.code == 200

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
unless res && res.code == 200
unless res&.code == 200

Comment on lines +66 to +70
unless Rex::Version.new(flow_version) <= Rex::Version.new('3.0.5')
return Exploit::CheckCode::Safe(
"Flowise version #{flow_version} is not vulnerable"
)
end

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just FYI, this is also possible:

Suggested change
unless Rex::Version.new(flow_version) <= Rex::Version.new('3.0.5')
return Exploit::CheckCode::Safe(
"Flowise version #{flow_version} is not vulnerable"
)
end
return Exploit::CheckCode::Safe("Flowise version #{flow_version} is not vulnerable" ) unless Rex::Version.new(flow_version) <= Rex::Version.new('3.0.5')

@rmhowe425 rmhowe425 Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I initially had this but RuboCop is complaining, giving me the following: Style/MultilineIfModifier: Favor a normal unless-statement over a modifier clause in a multiline statement

😄

}
)

fail_with(Failure::Unknown, 'Unexpected server reply while requesting reset token.') unless res && res.code == 201

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
fail_with(Failure::Unknown, 'Unexpected server reply while requesting reset token.') unless res && res.code == 201
fail_with(Failure::Unknown, 'Unexpected server reply while requesting reset token.') unless res&.code == 201

)

fail_with(Failure::Unknown, 'Unexpected server reply while requesting reset token.') unless res && res.code == 201
res.get_json_document['user']['tempToken']

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just to be safe

Suggested change
res.get_json_document['user']['tempToken']
res.get_json_document.dig('user','tempToken')

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Oh sweet I didn't know you could do that in Ruby

}.to_json
}
)
fail_with(Failure::Unknown, 'Unexpected server reply while resetting password.') unless res && res.code == 201

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
fail_with(Failure::Unknown, 'Unexpected server reply while resetting password.') unless res && res.code == 201
fail_with(Failure::Unknown, 'Unexpected server reply while resetting password.') unless res&.code == 201

@rmhowe425
rmhowe425 requested a review from msutovsky-r7 August 7, 2026 12:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

ENH: Auxiliary module for Flowise Authentication Bypass CVE-2025-58434

2 participants