<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>M1S0 · Security Researcher</title>
    <link>https://m1s0-0.github.io/</link>
    <description>Writeups on vulnerability research, exploitation, and smart contract auditing.</description>
    <language>en</language>
    <managingEditor>M1S0</managingEditor>
    <lastBuildDate>Fri, 12 Sep 2025 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://m1s0-0.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>When &quot;validate code&quot; runs the code: unauthenticated RCE in Langflow</title>
      <link>https://m1s0-0.github.io/writeups/posts/langflow-rce-cve-2025-3248.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/langflow-rce-cve-2025-3248.html</guid>
      <description>An endpoint whose whole job was to check a snippet of Python turned out to run it, with no login required. CVE-2025-3248, found live on an internet-exposed instance, from a validator to a root shell.</description>
      <pubDate>Fri, 12 Sep 2025 00:00:00 GMT</pubDate>
      <category>RCE</category>
      <category>CVE-2025-3248</category>
      <category>Langflow</category>
      <category>Unauthenticated</category>
    </item>
    <item>
      <title>IDOR on CoinDepo: reading any user&apos;s KYC through a trusted email field</title>
      <link>https://m1s0-0.github.io/writeups/posts/coindepo-idor.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/coindepo-idor.html</guid>
      <description>One profile endpoint decided whose data to return from values in the request, not from who was logged in. Any authenticated user could pull another user&apos;s full KYC record.</description>
      <pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate>
      <category>IDOR</category>
      <category>BOLA</category>
      <category>Broken Access Control</category>
      <category>API</category>
      <category>PII</category>
    </item>
    <item>
      <title>Share price manipulation in CarthaVault through an in-flight deposit</title>
      <link>https://m1s0-0.github.io/writeups/posts/carthavault-share-manipulation.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/carthavault-share-manipulation.html</guid>
      <description>The vault priced new shares against a total value that briefly dropped while its assets were in transit to an external pool. Any depositor could exploit that window to mint inflated shares and take value from existing holders.</description>
      <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
      <category>Share Price Manipulation</category>
      <category>DeFi</category>
      <category>Vault</category>
      <category>Smart Contract</category>
    </item>
    <item>
      <title>How I earned a $750 bounty for a dependency confusion attack on Dell</title>
      <link>https://m1s0-0.github.io/writeups/posts/dell-dependency-confusion.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/dell-dependency-confusion.html</guid>
      <description>A package name Dell forgot to claim was all it took. The whole story, in plain English, from the file I found to the bounty that landed.</description>
      <pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate>
      <category>Dependency Confusion</category>
      <category>Supply Chain</category>
      <category>RCE</category>
      <category>npm</category>
    </item>
    <item>
      <title>One link to unlink: a CSRF in OpenAI&apos;s Discord verification</title>
      <link>https://m1s0-0.github.io/writeups/posts/openai-discord-csrf-unlink.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/openai-discord-csrf-unlink.html</guid>
      <description>An unlink action on OpenAI&apos;s Discord verification service ran on a plain GET with no anti-CSRF token, so a single crafted link could quietly pull any member out of the OpenAI Discord without their knowledge.</description>
      <pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate>
      <category>CSRF</category>
      <category>OpenAI</category>
      <category>Discord</category>
      <category>Authenticated Action</category>
    </item>
    <item>
      <title>The flood limiter that never fires: a DoS in Base&apos;s consensus gossip</title>
      <link>https://m1s0-0.github.io/writeups/posts/base-gossip-flood-limiter-bypass.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/base-gossip-flood-limiter-bypass.html</guid>
      <description>Base&apos;s gossip layer caps how many blocks it accepts per height, but it recorded a block only after verifying its signature. Forged-signature blocks were never counted, so the limiter never fired and every one still cost a full ECDSA recovery.</description>
      <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
      <category>Denial of Service</category>
      <category>Consensus</category>
      <category>Blockchain</category>
      <category>P2P</category>
    </item>
    <item>
      <title>One URL away from the room: an access-control bypass on a Dell video service</title>
      <link>https://m1s0-0.github.io/writeups/posts/dell-pexip-access-control-bypass.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/dell-pexip-access-control-bypass.html</guid>
      <description>A Dell video-conferencing app made you pass a join step at one path, then served the same room at a sibling path with no gate at all. Changing a single character in the URL walked straight into the dashboard.</description>
      <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
      <category>Broken Access Control</category>
      <category>Authentication Bypass</category>
      <category>Web App</category>
    </item>
    <item>
      <title>Email bombing on WhiteMarket: racing the verification-resend limit</title>
      <link>https://m1s0-0.github.io/writeups/posts/whitemarket-email-bombing.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/whitemarket-email-bombing.html</guid>
      <description>The resend-verification endpoint was rate limited and even returned 429 under load, but the limit was not atomic. A parallel burst slipped a stack of emails through before the limiter caught up.</description>
      <pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate>
      <category>Race Condition</category>
      <category>Rate Limit Bypass</category>
      <category>Email Bombing</category>
      <category>GraphQL</category>
    </item>
    <item>
      <title>Racing the rate limit: unlimited OTP emails on LeveX</title>
      <link>https://m1s0-0.github.io/writeups/posts/levex-otp-race-condition.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/levex-otp-race-condition.html</guid>
      <description>The endpoint that sends a one-time code capped how often you could call it, but not atomically. Firing the same request in parallel slipped a burst past the limit and flooded the mailbox.</description>
      <pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate>
      <category>Race Condition</category>
      <category>Rate Limit Bypass</category>
      <category>OTP</category>
      <category>API</category>
    </item>
    <item>
      <title>Sending mail as Microsoft: an open SMTP relay on port 25</title>
      <link>https://m1s0-0.github.io/writeups/posts/smtp-open-relay-spoofing.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/smtp-open-relay-spoofing.html</guid>
      <description>A mail server accepted email from anyone, addressed to anyone, claiming to be anyone, with no login. An open relay that turns one forgotten server into a phishing engine.</description>
      <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
      <category>SMTP</category>
      <category>Open Relay</category>
      <category>Email Spoofing</category>
      <category>Phishing</category>
    </item>
    <item>
      <title>Trapped approvals in Folks Finance Staking: a permit you could grant but never revoke</title>
      <link>https://m1s0-0.github.io/writeups/posts/folks-finance-irrevocable-permit.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/folks-finance-irrevocable-permit.html</guid>
      <description>A role check sat on the wrong side of an approval. Once an admin removed a migrator&apos;s role, users could no longer revoke the permit they had given it, leaving a latent authorization over their staked funds that they could not take back.</description>
      <pubDate>Fri, 08 Aug 2025 00:00:00 GMT</pubDate>
      <category>Access Control</category>
      <category>Smart Contract</category>
      <category>DeFi</category>
      <category>Griefing</category>
    </item>
    <item>
      <title>A frozen bond in Base&apos;s dispute game: the escape hatch that could not open</title>
      <link>https://m1s0-0.github.io/writeups/posts/base-bond-lock-zk-nullification.html</link>
      <guid isPermaLink="true">https://m1s0-0.github.io/writeups/posts/base-bond-lock-zk-nullification.html</guid>
      <description>A safety timeout was meant to return an honest proposer&apos;s bond if a game got stuck, but a ZK verifier nullification stuck it in the one state the timeout was gated against, locking the bond in DelayedWETH with no recovery path.</description>
      <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
      <category>Frozen Funds</category>
      <category>Dispute Game</category>
      <category>Smart Contract</category>
      <category>L2</category>
    </item>
  </channel>
</rss>
