<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SchmiemanDev</title>
    <description>The latest articles on DEV Community by SchmiemanDev (@schmiemandev).</description>
    <link>https://dev.to/schmiemandev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3844417%2Ff29d3675-c9ba-4dfa-98f8-5bbd4c2a49d6.png</url>
      <title>DEV Community: SchmiemanDev</title>
      <link>https://dev.to/schmiemandev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/schmiemandev"/>
    <language>en</language>
    <item>
      <title>Stop failing App Store reviews: Meet Flutter Permission Scanner</title>
      <dc:creator>SchmiemanDev</dc:creator>
      <pubDate>Sun, 29 Mar 2026 11:14:48 +0000</pubDate>
      <link>https://dev.to/schmiemandev/stop-failing-app-store-reviews-meet-flutter-permission-scanner-3iga</link>
      <guid>https://dev.to/schmiemandev/stop-failing-app-store-reviews-meet-flutter-permission-scanner-3iga</guid>
      <description>&lt;p&gt;If you’ve ever built a Flutter app, you know the drill. You need a feature, you head to &lt;code&gt;pub.dev&lt;/code&gt;, you run &lt;code&gt;flutter pub add&lt;/code&gt;, and you move on with your life. We love the Dart ecosystem because it abstracts away the native code.&lt;/p&gt;

&lt;p&gt;But there is a massive blind spot here: &lt;strong&gt;what native permissions did that package just sneak into your &lt;code&gt;AndroidManifest.xml&lt;/code&gt; or &lt;code&gt;Info.plist&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my last article about building the Damn Vulnerable Flutter App (DVFA), I mentioned how insanely easy it is to misconfigure native manifests when you spend 99% of your time writing Dart. If a random analytics package secretly drags in &lt;code&gt;ACCESS_FINE_LOCATION&lt;/code&gt; or &lt;code&gt;RECORD_AUDIO&lt;/code&gt;, two things happen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apple and Google will reject your app during review for missing privacy descriptions.&lt;/li&gt;
&lt;li&gt;Your users will get a creepy system popup asking to track them, and they will immediately uninstall your app.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted a quick way to audit exactly what my dependencies were asking for without manually digging through the &lt;code&gt;.dart_tool&lt;/code&gt; cache. It didn't exist.&lt;/p&gt;

&lt;p&gt;So, I built it.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://pub.dev/packages/flutter_permission_scanner" rel="noopener noreferrer"&gt;Flutter Permission Scanner&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is a completely open-source Dart CLI tool that scans your host app &lt;em&gt;and&lt;/em&gt; all your dependencies to generate a clean, consolidated report of every native permission your app is requesting across Android, iOS, and macOS.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Discovery:&lt;/strong&gt; It automatically resolves your local and cached packages and scans their native source files (&lt;code&gt;AndroidManifest.xml&lt;/code&gt;, &lt;code&gt;Info.plist&lt;/code&gt;, &lt;code&gt;.podspec&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sensitive Highlighting:&lt;/strong&gt; It automatically flags "Dangerous" permissions (like Camera, Microphone, and Location) so you know exactly which packages are going to trigger user consent popups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD Ready:&lt;/strong&gt; Are you a DevSecOps fan? You can run it with the &lt;code&gt;--json&lt;/code&gt; or &lt;code&gt;--markdown&lt;/code&gt; flags. I built this specifically so you can plug it into a GitHub Action and automatically post a Markdown table of permission changes directly to your Pull Requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform:&lt;/strong&gt; It handles Android, iOS, and macOS permission keys right out of the box.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try it out
&lt;/h3&gt;

&lt;p&gt;Because it's a pure Dart CLI, you don't need to install anything crazy to get started. Just activate it globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dart pub global activate flutter_permission_scanner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, navigate to the root of any Flutter project and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter_permission_scanner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check out the source code, read the CI/CD documentation, or report bugs over on the GitHub repository:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Schmiemandev/flutter_permission_scanner" rel="noopener noreferrer"&gt;flutter_permission_scanner on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://pub.dev/packages/flutter_permission_scanner" rel="noopener noreferrer"&gt;View on pub.dev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drop a ⭐️ on GitHub if you find it useful! Also, let me know in the comments: have you ever had an app rejected by Apple or Google because of a permission hiding inside a 3rd-party package?&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>The Open-Source Security Guide for Flutter Developers</title>
      <dc:creator>SchmiemanDev</dc:creator>
      <pubDate>Fri, 27 Mar 2026 19:39:43 +0000</pubDate>
      <link>https://dev.to/schmiemandev/the-open-source-security-guide-for-flutter-developers-4p8e</link>
      <guid>https://dev.to/schmiemandev/the-open-source-security-guide-for-flutter-developers-4p8e</guid>
      <description>&lt;p&gt;We spend a lot of time in the Flutter community arguing about state management and app architecture. But when I recently went looking for a centralized list of mobile AppSec tools specifically for Flutter, I hit a wall.&lt;/p&gt;

&lt;p&gt;There wasn't a dedicated "Awesome" repository for Flutter security. The resources for both defending and reverse-engineering compiled Dart apps were completely scattered.&lt;/p&gt;

&lt;p&gt;So, instead of hoarding my personal bookmarks, I made the repo myself.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://github.com/Schmiemandev/awesome-flutter-security" rel="noopener noreferrer"&gt;Awesome Flutter Security&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s a curated, open-source list of Flutter application security resources, defensive tools, and vulnerable sandboxes. Whether you are a developer trying to lock down your app or a pentester trying to break one, I wanted everything in one place.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's inside:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Defensive Tools:&lt;/strong&gt; RASP (Runtime Application Self-Protection), obfuscation guides, and the right ways to handle secure storage and biometrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offensive Tools:&lt;/strong&gt; Frameworks like &lt;code&gt;reFlutter&lt;/code&gt; and &lt;code&gt;blutter&lt;/code&gt; for intercepting traffic, bypassing SSL pinning, and reverse-engineering AOT binaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Practice Sandboxes:&lt;/strong&gt; Intentionally vulnerable apps (like DVFA) mapped to the OWASP Mobile Top 10 so you can practice your hacking skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standards:&lt;/strong&gt; The must-read guidelines from OWASP and the official Flutter team.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Let's build this together
&lt;/h3&gt;

&lt;p&gt;The goal is to make this the standard AppSec reference for the Flutter ecosystem. If you know of a tool, a great article, or a package that belongs on this list, PRs are highly welcome!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out the repository here: &lt;a href="https://github.com/Schmiemandev/awesome-flutter-security" rel="noopener noreferrer"&gt;Awesome Flutter Security&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drop a ⭐️ if you find it useful, and let me know in the comments: what is your go-to package for securing your Flutter apps? Did I miss any hidden gems?&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>security</category>
      <category>dart</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built a "Damn Vulnerable" Flutter App to Teach Mobile AppSec (and how to hack it)</title>
      <dc:creator>SchmiemanDev</dc:creator>
      <pubDate>Thu, 26 Mar 2026 09:56:06 +0000</pubDate>
      <link>https://dev.to/schmiemandev/i-built-a-damn-vulnerable-flutter-app-to-teach-mobile-appsec-and-how-to-hack-it-51aa</link>
      <guid>https://dev.to/schmiemandev/i-built-a-damn-vulnerable-flutter-app-to-teach-mobile-appsec-and-how-to-hack-it-51aa</guid>
      <description>&lt;p&gt;If you hang out in Flutter communities, you know we spend &lt;em&gt;a lot&lt;/em&gt; of time arguing about state management. Bloc, Riverpod, Provider—pick your poison. But there's one topic we almost never talk about: what actually happens when a bad actor gets their hands on our compiled &lt;code&gt;libapp.so&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;I recently wanted to dive deep into mobile AppSec. The problem? Almost all the hands-on resources out there focus heavily on native Android (Java/Kotlin) or iOS (Swift). I wanted to see exactly how the OWASP Mobile Top 10 translates to the Flutter ecosystem, but I couldn't find a good playground to test things out.&lt;/p&gt;

&lt;p&gt;So, I decided to build one myself. And I made it intentionally terrible. 😅&lt;/p&gt;

&lt;p&gt;Meet the &lt;strong&gt;Damn Vulnerable Flutter App (DVFA)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It’s a FinTech-themed Flutter application purposely riddled with security flaws. I mapped the vulnerabilities directly to the OWASP Mobile Application Security Verification Standard (MASVS) so developers and security researchers can practice static analysis, intercept traffic, and reverse-engineer AOT binaries without setting up a massive environment from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some of my favorite ways to break this app:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;AOT Reverse Engineering:&lt;/strong&gt; (Challenge 7). The app exports an encrypted bank statement using the &lt;code&gt;encrypt&lt;/code&gt; package (AES-CBC), but the AES key is statically managed in the Dart code. Your job? Extract the &lt;code&gt;libapp.so&lt;/code&gt; binary, run it through tools like &lt;code&gt;blutter&lt;/code&gt;, and recover the hardcoded key.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Deep Link Hijacking:&lt;/strong&gt; (Challenge 5). I registered a custom &lt;code&gt;dvfa://app&lt;/code&gt; scheme in the Android manifest. If you craft a malicious deep link, you can force the app to bypass user confirmation and automatically execute a fund transfer.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The "Oops" Data Leak:&lt;/strong&gt; (Challenge 10). There is no explicitly vulnerable "bad code" here. Instead, I intentionally &lt;em&gt;didn't&lt;/em&gt; implement a &lt;code&gt;WidgetsBindingObserver&lt;/code&gt;. Because the app doesn't detect when it goes to the background, the OS takes a clear screenshot of the financial dashboard for the App Switcher, leaking sensitive data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also threw in a Dockerized mock backend (built with Flask) so you can practice intercepting unencrypted HTTP traffic. &lt;/p&gt;

&lt;h3&gt;
  
  
  Try it out
&lt;/h3&gt;

&lt;p&gt;If you want to test your AppSec skills, you can grab the compiled APK from the Releases tab for a blind black-box test, or clone the repo to read the source code:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Schmiemandev/dvfa" rel="noopener noreferrer"&gt;https://github.com/Schmiemandev/dvfa&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What's next?
&lt;/h3&gt;

&lt;p&gt;Building DVFA made me realize how insanely easy it is to misconfigure native manifests when you spend 99% of your time writing Dart. I'm currently hacking on a CLI tool that automatically scans Flutter CI/CD pipelines for these exact misconfigurations before the app gets compiled. I'll be open-sourcing that soon!&lt;/p&gt;

&lt;p&gt;P.S. This is my very first article on DEV! Let me know what you think of DVFA, and if anyone actually manages to beat Challenge 7, drop a comment below, I'd love to see how you approached it!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>security</category>
      <category>dart</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
