<?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: 野鹤</title>
    <description>The latest articles on DEV Community by 野鹤 (@yehechuhai).</description>
    <link>https://dev.to/yehechuhai</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%2F4212546%2Fec41d4a4-2723-4a2d-a719-ee02f8a86192.png</url>
      <title>DEV Community: 野鹤</title>
      <link>https://dev.to/yehechuhai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yehechuhai"/>
    <language>en</language>
    <item>
      <title>948 Linux Root Exploits in One Run: What OpenAI's Kernel Pipeline Actually Proves — and What It Doesn't</title>
      <dc:creator>野鹤</dc:creator>
      <pubDate>Thu, 05 Nov 2026 02:18:12 +0000</pubDate>
      <link>https://dev.to/yehechuhai/948-linux-root-exploits-in-one-run-what-openais-kernel-pipeline-actually-proves-and-what-it-47a</link>
      <guid>https://dev.to/yehechuhai/948-linux-root-exploits-in-one-run-what-openais-kernel-pipeline-actually-proves-and-what-it-47a</guid>
      <description>&lt;p&gt;OpenAI's November 4 research post, "A thousand fewer paths to root," reports a striking result: a prototype pipeline powered by an upcoming cyber model scanned the Linux kernel in mid-October 2026 and produced 948 distinct local privilege escalation (LPE) exploits, each with a candidate patch. The headline number is real, but it is easy to read it as more — or less — than it is. Here is what the pipeline actually did, what the 948 means, and what it does not prove.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline in five stages
&lt;/h2&gt;

&lt;p&gt;OpenAI describes five stages, with human review at the end:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vulnerability discovery.&lt;/strong&gt; Scout agents picked audit targets reachable by low-privileged users, then Analyst agents scanned them for candidate findings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic validation.&lt;/strong&gt; Triage agents built proofs of concept and ran them in isolated virtual machines with Kernel Address Sanitizer (KASAN) enabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exploitability assessment.&lt;/strong&gt; Agents tested whether validated flaws could leak information or escalate privileges, on VMs configured like a standard Linux distribution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patch generation.&lt;/strong&gt; The system generated a candidate patch for each validated vulnerability, with variant analysis to check completeness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human review.&lt;/strong&gt; Researchers reviewed the exploit, patch, and proposed severity before reporting anything to maintainers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last stage matters. Nothing in this run was an unsupervised dump of exploits: OpenAI says reporting began with critical vulnerabilities, following guidance from the Linux kernel community, and continued through its Patch the Planet partners.&lt;/p&gt;

&lt;h2&gt;
  
  
  The funnel: from 2,308 candidates to 948
&lt;/h2&gt;

&lt;p&gt;The numbers tell a story of attrition, not magic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scout agents narrowed the kernel — more than 40 million lines of code — to 5,034 audit targets covering about 2.8 million lines, roughly 7% of the codebase. That step cost $3,426 in API credits.&lt;/li&gt;
&lt;li&gt;Analyst agents produced 2,308 candidate findings in 12 hours, for $316,549 in API credits.&lt;/li&gt;
&lt;li&gt;Validation reproduced 1,724 vulnerabilities within 30 hours, about 74.7% of the candidates, for $73,330. Only 3.1% of the remainder reflected incorrect analysis; the rest needed elevated privileges, failed to reproduce within the time budget, or involved hard-to-trigger conditions such as race conditions.&lt;/li&gt;
&lt;li&gt;Screening narrowed the validated set to 313 information-leak candidates and 1,238 LPE candidates.&lt;/li&gt;
&lt;li&gt;Exploit-development agents produced 291 information-leak proofs of concept and 1,169 working LPE exploits, then variant analysis grouped those into 948 distinct patches. That 948 is the count of unique LPEs, defined by the distinct patch that closes each one — not a count of merged kernel fixes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exploitation stage cost $775,929 in API credits, bringing the full run to $1,213,430. OpenAI is explicit that these are API costs for this evaluation, not an all-in research expense, and that they are more of an upper bound: better harness engineering could reduce them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the 948 does not mean
&lt;/h2&gt;

&lt;p&gt;Three common misreadings are worth correcting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not 948 patched kernels.&lt;/strong&gt; Candidate patches are not merged fixes. Ten days after the scan, OpenAI reports that 61 LPEs had already been patched upstream, 43 had staging patches, and 299 were being reported and discussed publicly. The rest were still working through the reporting pipeline. That is actually a sign the disclosure process is functioning — but the gap between "candidate patch generated" and "fix shipped to users" is the whole game in kernel security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not remote compromise.&lt;/strong&gt; These are local privilege escalations: they turn an existing low-privileged foothold into root access. They do not, by themselves, break into a machine from the network. The test VMs ran a stock desktop operating system with standard protections enabled — SMEP, SMAP, KASLR, and HARDENED_USERCOPY — which makes the result stronger, not weaker, but the threat model is still "attacker already has a local account."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not a fixed price for finding bugs.&lt;/strong&gt; The July 2026 run with GPT-5.6 Sol found 166 unique LPEs for $513,690 end to end; the October run with the newer cyber model found 948 for $1,213,430. Capability improved faster than cost grew, but both figures depend on the model, the target snapshot, and the harness. Rescanning the same codebase with a stronger model found bugs the earlier model missed — OpenAI's own takeaway is to rescan previously audited code as models improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most instructive failure in the report
&lt;/h2&gt;

&lt;p&gt;OpenAI discloses an early-run error that should be required reading for anyone building autonomous security agents. In an early exploitation run, agents reported 200 successful LPE exploits — but human review found that 20 of them had achieved root through a &lt;em&gt;different&lt;/em&gt; 0-day than the one assigned. The pipeline's success condition was "a root shell was obtained," and a root shell was indeed obtained — just not via the vulnerability under test.&lt;/p&gt;

&lt;p&gt;The fix was to tighten the task constraints and add an independent check confirming that each final exploit used its assigned vulnerability. The lesson generalizes far beyond kernel research: verify the path to a result, not just the result. Any agent benchmark or security test that checks only the outcome will accept shortcuts, and in vulnerability research a shortcut is itself an undisclosed finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why defenders should care more than attackers
&lt;/h2&gt;

&lt;p&gt;OpenAI compares the run's cost with historical bug bounties: Pwn2Own and TyphoonPWN historically offered $20,000 and $70,000 for Linux kernel LPE exploits, which would value 948 exploits at a hypothetical $18.9M to $66.3M — roughly 16x to 55x the pipeline's API cost. On Google's hardened kernelCTF target, the pipeline produced 21 LPE exploits in 112 hours for about $32,936, against 26 confirmed 0-day LPEs accepted by kernelCTF in 2026 at the time of writing.&lt;/p&gt;

&lt;p&gt;Those bounty comparisons are hypothetical, not revenue. Their real point is about incentives: if finding a class of bugs becomes this cheap and systematic, the advantage goes to whoever runs the pipeline first and patches fastest. OpenAI also notes a creative signal worth watching: sampling 166 exploits, researchers found 10 exploitation techniques that, to their knowledge and that of consulted third-party experts, were new — including new persistent elastic objects, page-grooming techniques, and data-only privilege escalation approaches. The details are withheld for safety, but the implication is that frontier models are not only matching known patterns; they are generating novel techniques.&lt;/p&gt;

&lt;p&gt;The practical takeaways for teams that ship software:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep systems updated.&lt;/strong&gt; The 10-day patching snapshot — 61 fixed, 43 staged, 299 in discussion — shows how fast the window between disclosure and fix can move, and how exposed unpatched systems are in the meantime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rescan old code with new models.&lt;/strong&gt; A codebase audited six months ago is not audited against today's models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate the path, not just the outcome.&lt;/strong&gt; If you use agents for security testing, add independent checks that the reported vulnerability is the one actually exploited.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat patch generation as a draft, not a decision.&lt;/strong&gt; AI-generated patches needed iteration to be minimal, convention-following, and variant-complete — and in a few cases the prototype caught issues in human-written patches before merge, which argues for adversarial review of all patches, whoever wrote them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OpenAI's conclusion is deliberately modest: every generation of models should help build software that the next generation finds harder to compromise. The 948 exploits are evidence that the first half of that sentence is now measurable. The second half depends on how fast maintainers, distributors, and users close the gap.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;All figures in this article are from OpenAI's November 4, 2026 research post: &lt;a href="https://openai.com/index/a-thousand-fewer-paths-to-root/" rel="noopener noreferrer"&gt;https://openai.com/index/a-thousand-fewer-paths-to-root/&lt;/a&gt; — re-check the original before relying on a number, since reporting and patching status change over time.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>linux</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why public Muse invite codes die so fast (and what a live pool changes)</title>
      <dc:creator>野鹤</dc:creator>
      <pubDate>Sat, 31 Oct 2026 07:18:35 +0000</pubDate>
      <link>https://dev.to/yehechuhai/why-public-muse-invite-codes-die-so-fast-and-what-a-live-pool-changes-jdf</link>
      <guid>https://dev.to/yehechuhai/why-public-muse-invite-codes-die-so-fast-and-what-a-live-pool-changes-jdf</guid>
      <description>&lt;p&gt;If you have tried to redeem a Muse invite code from a public post or comment thread, you probably know the pattern: you copy a code, paste it into the app, and nothing works. Then you try another one. Then another one. The problem is usually not you, and it is usually not a typo. It is that a public code list has no state.&lt;/p&gt;

&lt;p&gt;Here is the part most people miss: the 48-hour clock starts when you sign up, not when you find a code. In the Muse app, go to Settings and look for Redeem token. On the web, it is Settings, then General, then Usage, then Redeem invite code. That entry only exists for the first 48 hours after you join. After a successful redemption it disappears on the web, which is normal. If you signed up days ago and only started looking for a code now, the window may already be gone, and no code in the world will fix that. Find a code first, or at least check the clock first, and redeem immediately once you have one. Do not stockpile codes.&lt;/p&gt;

&lt;p&gt;The second part is the cap. Each code can be redeemed by multiple people, but only up to a limit, and the exact number is not published by Meta — the app itself shows the limit. A code pasted into a comment thread gets tried by everyone who scrolls past it. Nothing in the thread updates when the code fills up. So by the time you see it, it may have been full for hours. Trying a pile of dead codes does not just waste time; it burns your 48-hour window.&lt;/p&gt;

&lt;p&gt;That is why a static list is the wrong shape for this problem. What you actually need before trying a code is three pieces of state: how many times it has already been claimed (least-claimed first is the obvious order), whether anyone has recently redeemed it successfully (a warm code beats a cold one), and when it entered the pool (a code added today has been tried fewer times than one from a week ago). And when a code is confirmed dead, it should be delisted so the next person does not waste a try on it. A report from one user, verified as a hard failure, should be enough to pull it.&lt;/p&gt;

&lt;p&gt;That is the model behind the pool I have been using: a community pool of 4,000+ publicly shared codes, with new codes arriving every day, sorted least-claimed first, with dead codes removed on confirmed failure reports. It works in both directions. If you need a code, you check the state before you try. If you have a spare code, posting it into the pool beats burying it in a comment thread, because it stays visible and its state stays tracked instead of being scrolled away in minutes.&lt;/p&gt;

&lt;p&gt;One honest caveat: no code is guaranteed to work. Public codes fill up at any moment. The right habit is always the same: check the state first, redeem immediately, and report back whether it worked, because your report is what keeps the state true for the next person.&lt;/p&gt;

&lt;p&gt;The pool is here, interface in Chinese but codes are language-neutral — copy and paste works regardless of UI language: &lt;a href="https://fuyelist.com/muse/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=muse_pool" rel="noopener noreferrer"&gt;https://fuyelist.com/muse/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=muse_pool&lt;/a&gt;&lt;/p&gt;

</description>
      <category>networking</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Static Residential IPs for Account Management: What Actually Matters Before You Buy</title>
      <dc:creator>野鹤</dc:creator>
      <pubDate>Thu, 29 Oct 2026 06:27:02 +0000</pubDate>
      <link>https://dev.to/yehechuhai/static-residential-ips-for-account-management-what-actually-matters-before-you-buy-50df</link>
      <guid>https://dev.to/yehechuhai/static-residential-ips-for-account-management-what-actually-matters-before-you-buy-50df</guid>
      <description>&lt;p&gt;If you run more than one social media account, you already know the usual advice: vary your behavior, don't spam, warm up slowly. What most guides skip is the network underneath all of it. Platforms don't just watch what you do. They watch where you connect from, and the IP address is the first thing they check.&lt;/p&gt;

&lt;p&gt;This guide covers how static residential IPs actually work, how to evaluate one before paying, and the mistakes that get accounts flagged even when behavior looks clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the IP comes first
&lt;/h2&gt;

&lt;p&gt;Every account accumulates a fingerprint made of device, behavior, and network. The IP is the most structural part of that fingerprint, and the easiest for a platform to judge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A datacenter IP is trivially identifiable. Its ASN belongs to a hosting company, not an ISP, so the platform knows no real household connects from it.&lt;/li&gt;
&lt;li&gt;A shared IP links accounts together. If one account on that IP gets banned for abuse, every other account on the same IP inherits suspicion.&lt;/li&gt;
&lt;li&gt;A residential IP is assigned by an ISP to a household. It looks like ordinary user traffic, which is the whole point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this replaces good behavior. An IP is necessary, not sufficient. But a bad IP can sink an account before behavior even matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Static vs rotating: pick by the job
&lt;/h2&gt;

&lt;p&gt;Rotating proxies give you a new IP per request or per session. That is great for scraping, where volume and distribution matter. It is bad for account management, where consistency matters. An account that logs in from a different city every hour does not look like a person. It looks like a botnet.&lt;/p&gt;

&lt;p&gt;A static residential IP stays the same across sessions. The account builds a stable history on one address, which is exactly what long term account nurturing needs. Rule of thumb: scraping rotates, account management stays static.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist before you buy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Exclusivity.&lt;/strong&gt; Dedicated or shared? A shared "residential" IP means someone else's abuse can become your ban. For accounts you plan to keep, dedicated is worth the premium.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Native residential quality.&lt;/strong&gt; Check who the IP is registered to. A genuinely residential IP resolves to an ISP's ASN. If the ASN belongs to a cloud provider or a hosting company, it is datacenter traffic wearing a residential label, no matter what the sales page says.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Speed cap vs bandwidth.&lt;/strong&gt; Account work is light: posting, messaging, browsing. A 20 Mbps cap with unlimited traffic is plenty for that. Don't pay for gigabit speeds you will never use, and don't confuse a speed cap with a data cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Location match.&lt;/strong&gt; The IP country, the account's declared region, the device timezone, and the language setting should agree. A US account logging in from a Japanese IP with a Chinese timezone is a mismatch the platform can see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Term length.&lt;/strong&gt; Most providers sell 1, 3, or 6 month terms. Longer is cheaper per month and gives the account a longer stable history. But never buy long before testing: run one IP for a week first and check it actually works for your use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. History check.&lt;/strong&gt; Before committing, check the IP's reputation: fraud score, blocklist status, and whether it was previously used for abuse. A cheap IP with a dirty history is the most expensive kind.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use one in practice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One identity per IP. At minimum, don't run many accounts through a single address.&lt;/li&gt;
&lt;li&gt;Keep the environment consistent: same IP, same browser profile, same timezone, same language. Consistency is what makes an account look real.&lt;/li&gt;
&lt;li&gt;Don't use a server IP as an account IP. A VPS address is a datacenter address, and it carries all the datacenter disadvantages above. Servers are for tooling, not for logging into accounts.&lt;/li&gt;
&lt;li&gt;Validate small first. One account, one IP, one week. Scale only after that works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The pitfalls that keep showing up
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Buying "residential" that is actually datacenter traffic. Always check the ASN.&lt;/li&gt;
&lt;li&gt;Buying "static" that quietly rotates every few days. Test persistence before you trust it.&lt;/li&gt;
&lt;li&gt;Sharing one IP across many accounts to save money, then losing all of them at once.&lt;/li&gt;
&lt;li&gt;Expecting an IP to fix bad behavior. It won't. It only removes the network reason for a ban.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;For long term accounts, the formula is simple: dedicated, static, native residential, location matched, tested before scaling. Get those five right and the network stops being the reason your accounts die.&lt;/p&gt;

</description>
      <category>proxy</category>
      <category>networking</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
