See how dpgaspar compares to other vendors in security performance
Impact Auth DB login form default cache directives allows browser to locally store sensitive data. This can be an issue on environments using shared computer resources.
Patches Upgrade flask-appbuilder to version 4.5.1
Workarounds If upgrading is not possible configure your web server to send the following HTTP headers for /login: "Cache-Control": "no-store, no-cache, must-revalidate, max-age=0" "Pragma": "no-cache" "Expires": "0"
Impact When Flask-AppBuilder is set to AUTHTYPE AUTHOID, allows an attacker to forge an HTTP request, that could deceive the backend into using any requested OpenID service. This vulnerability could grant an attacker unauthorised privilege access if a custom OpenID service is deployed by the attacker and accessible by the backend.
This vulnerability is only exploitable when the application is using the old (deprecated 10 years ago) OpenID 2.0 authorization protocol (which is very different from the popular OIDC - Open ID Connect - popular protocol used today). Currently, this protocol is regarded as legacy, with significantly reduced usage and not supported for several years by major authorization providers.
Patches Upgrade to Flask-AppBuilder 4.3.11
Workarounds If upgrade is not possible add the following to your config:
from flask import flash, redirect from flaskappbuilder import expose from flaskappbuilder.security.sqla.manager import SecurityManager from flaskappbuilder.security.views import AuthOIDView from flaskappbuilder.security.forms import LoginFormoid
basedir = os.path.abspath(os.path.dirname(file))
class FixedOIDView(AuthOIDView): @expose("/login/", methods=["GET", "POST"]) def login(self, flag=True): form = LoginFormoid() if form.validateonsubmit(): identityurl = None for provider in self.appbuilder.sm.openidproviders: if provider.get("url") == form.openid.data: identityurl = form.openid.data if identityurl is None: flash(self.invalidloginmessage, "warning") return redirect(self.appbuilder.geturlforlogin) return super().login(flag=flag)
class FixedSecurityManager(SecurityManager): authoidview = FixedOIDView
FABSECURITYMANAGERCLASS = "config.FixedSecurityManager"
Impact When Flask-AppBuilder is configured to use OAuth, LDAP, or other non-database authentication methods, the password reset endpoint remains registered and accessible, despite not being displayed in the user interface. This allows an enabled user to reset their password and be able to create JWT tokens even after the user is disabled on the authentication provider.
Patches Upgrade to Flask-AppBuilder version 4.8.1 or later
Workarounds If immediate upgrade is not possible: - Manually disable password reset routes in the application configuration - Implement additional access controls at the web server or proxy level to block access to the reset my password URL. - Monitor for suspicious password reset attempts from disabled accounts
Impact Flask-AppBuilder prior to 4.6.2 would allow for a malicious unauthenticated actor to perform an open redirect by manipulating the Host header in HTTP requests. Patches Flask-AppBuilder 4.6.2 introduced the FABSAFEREDIRECTHOSTS configuration variable, which allows administrators to explicitly define which domains are considered safe for redirection.
Examples: FABSAFEREDIRECTHOSTS = ["yourdomain.com", "sub.yourdomain.com", ".yourcompany.com"]
Workarounds Use a Reverse Proxy to Enforce Trusted Host Headers
References Are there any links users can visit to find out more?
Impact User enumeration in database authentication in Flask-AppBuilder < 3.4.4. Allows for a non authenticated user to enumerate existing accounts by timing the response time from the server when you are logging in.
Patches Upgrade to 3.4.4
Workarounds
References
For more information If you have any questions or comments about this advisory: Open an issue in example link to repo Email us at example email address
Flask-AppBuilder is an application development framework, built on top of the Flask web framework. Flask-AppBuilder contains an open redirect vulnerability when using database authentication login page on versions below 3.4.5. This issue is fixed in version 3.4.5. There are currently no known workarounds.
Impact An authenticated Admin user could craft HTTP requests to filter users by their salted and hashed passwords strings. These filters could be made by using partial hashed password strings. The response would not include the hashed passwords, but an attacker could infer partial password hashes and their respective users.
Only when using AUTHDB database authentication option.
Patches Fixed on 4.1.3
For more information If you have any questions or comments about this advisory: Open an issue in example link to repo Email us at example email address
Impact User enumeration in database authentication in Flask-AppBuilder <= 4.5.3 and werkzeug >= 3.0.0. Allows for a non authenticated user to enumerate existing usernames by timing the response time from the server when brute forcing requests to login.
Patches
Upgrade to flask-appbuilder>=4.5.3
Workarounds Downgrade werkzeug to <3.0.0
References Are there any links users can visit to find out more?
Impact A Cross-Site Scripting (XSS) vulnerability has been discovered on the OAuth login page. An attacker could trick a user to follow a specially crafted URL to the OAuth login page. This URL could inject and execute malicious javascript code that would get executed on the user's browser.
Impacted versions: Flask-AppBuilder version 4.1.4 up to and including 4.2.0
Patches This issue was introduced on 4.1.4 and patched on 4.2.1, user's should upgrade to 4.2.1 or newer versions.
Impact Lack of rate limiting will allow an attacker to brute-force user credentials.
Patches Ability to enable rate limiting on Flask-AppBuilder >= 4.3.0. Use AUTHRATELIMITED = True and RATELIMITENABLED = True set the limit itself by using AUTHRATELIMIT. Will apply only to database authentication.
Workarounds Implement rate limiting using a reverse proxy or other strategies.
Impact Improper authentication on the REST API. Allows for a malicious actor with a carefully crafted request to successfully authenticate and gain access to existing protected REST API endpoints. Only affects non database authentication types, and new REST API endpoints.
Patches Upgrade to Flask-AppBuilder 3.3.4
For more information If you have any questions or comments about this advisory: Open an issue in https://github.com/dpgaspar/Flask-AppBuilder
Impact If using Flask-AppBuilder OAuth, an attacker can share a carefully crafted URL with a trusted domain for an application built with Flask-AppBuilder, this URL can redirect a user to a malicious site. This is an open redirect vulnerability
Patches Install Flask-AppBuilder 3.2.2 or above
Workarounds Filter HTTP traffic containing ?next={next-site} where the next-site domain is different from the application you are protecting
Impact User enumeration in database authentication in Flask-AppBuilder <= 3.2.3. Allows for a non authenticated user to enumerate existing accounts by timing the response time from the server when you are logging in.
Patches Upgrade to 3.3.0
For more information If you have any questions or comments about this advisory: Open an issue in Flask-AppBuilder