flutter_notchpay handles payment credentials, so security issues are taken
seriously and fixed as a priority.
Please do not open a public issue for security vulnerabilities.
Instead, use GitHub's private reporting flow: Report a vulnerability.
Include, if possible:
- A description of the vulnerability and its impact.
- Steps to reproduce, or a minimal proof of concept.
- The version(s) of
flutter_notchpayaffected.
You should receive an acknowledgement within a few days. We'll work with you to understand and confirm the issue, prepare a fix, and coordinate disclosure timing before any public write-up.
Only the latest published 0.x minor version receives security fixes until
this package reaches 1.0.0, after which the two most recent major versions
will be supported.
These are the practices this package is designed around, and that your app should follow too:
- Never embed your NotchPay private/secret key (
sk_...) in a mobile app. It grants full account access (transfers, refunds, balance, recipients).NotchPayClientand every service that requires it (transfers,recipients,refunds,balance,sync) will throw aNotchPayConfigurationExceptionif no private key is configured — this is intentional friction, not a bug to work around by hardcoding one in your Flutter app. Only supplyprivateKeyfrom trusted backend Dart code. - Only the public key (
pk_...) belongs in your Flutter app, passed toNotchPay.init/NotchPay(...). It is the only credentialNotchPay.checkout()needs. - Build a hardened release. Use Flutter's
--obfuscate --split-debug-infoflags for release builds to make reverse engineering harder. - Rotate a key immediately if you believe it was exposed (committed to a public repo, logged, etc.), from your NotchPay dashboard.
- This package does not log request headers, keys, or raw response bodies
by itself. If you add your own logging around
NotchPayClient/services, make sure it doesn't capture theAuthorizationorX-Grantheaders.