<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/security/</link><description>Recent content in Security on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 21 Sep 2026 05:53:59 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Masking a JVM thread dump without breaking the analysis</title><link>https://foojay.io/today/masking-a-jvm-thread-dump-without-breaking-the-analysis/</link><pubDate>Wed, 09 Sep 2026 07:32:00 +0000</pubDate><guid>https://foojay.io/today/masking-a-jvm-thread-dump-without-breaking-the-analysis/</guid><description>&lt;p&gt;A few weeks ago I posted on r/java about detecting virtual thread pinning from a plain thread dump. The technical discussion was fine. The comment that stuck with me had nothing to do with pinning: &amp;ldquo;the problem isn&amp;rsquo;t taking the dump, it&amp;rsquo;s that uploading a production dump to a third-party site is against policy&amp;rdquo;. Not a preference. Policy. And the person saying it was right.&lt;/p&gt;&#10;&lt;p&gt;I run ThreadMine, a hosted thread dump analyzer, so that comment describes my own product. This article is about what I built in response: a small open-source CLI that rewrites the dump on your machine before it goes anywhere, in a way that keeps the analysis working. It&amp;rsquo;s called &lt;code&gt;tm-anon&lt;/code&gt;, it&amp;rsquo;s MIT, and it works with any analyzer, mine included. The interesting part isn&amp;rsquo;t the tool, it&amp;rsquo;s the constraint: you can&amp;rsquo;t just strip everything, because the analyzer needs most of what&amp;rsquo;s in there.&lt;/p&gt;</description></item><item><title>Solving Gradle metadata and Renovate integration</title><link>https://foojay.io/today/solving-gradle-metadata-and-renovate-integration/</link><pubDate>Wed, 19 Aug 2026 05:53:45 +0000</pubDate><guid>https://foojay.io/today/solving-gradle-metadata-and-renovate-integration/</guid><description>&lt;p&gt;My current company has settled on using Gradle. It doesn&amp;rsquo;t make me &lt;a href="https://blog.frankel.ch/final-take-gradle/" target="_blank" rel="noopener noreferrer"&gt;very happy&lt;/a&gt;, but you need to learn to work with constraints. Plus, I must admit that the developers who actually implemented the build files did a pretty good job overall: they used Kotlin instead of Groovy, they moved code to regular plugins, etc.&lt;/p&gt;&#10;&lt;p&gt;This week, I worked on improvements to a new project and set up Renovate. Renovate is similar to Dependabot in that it checks for new versions of your dependencies and automatically creates PRs for you. However, I quickly noticed that merges of new dependency versions failed the build. Here&amp;rsquo;s the full story on why, and how I fixed the issue.&lt;/p&gt;</description></item><item><title>Your AI Assistant Is Choosing Your Dependencies</title><link>https://foojay.io/today/vibe-coding-maven-and-the-dependencies-you-didnt-choose/</link><pubDate>Tue, 18 Aug 2026 14:01:20 +0000</pubDate><guid>https://foojay.io/today/vibe-coding-maven-and-the-dependencies-you-didnt-choose/</guid><description>&lt;p&gt;When I write about bad actors, I sometimes try to imagine where they are and how they work. For this article, it&amp;rsquo;s clearer than usual because there is some evidence around. You can use your imagination to fill in the gaps.&lt;/p&gt;&#10;&lt;p&gt;Imagine there&amp;rsquo;s a job going in Pyongyang. Long hours, of course, with probably brutal OKRs. The job is creating malicious packages, measured by how many you can publish a week, how many credentials you can steal, etc. The successful candidate will never meet a customer face to face, but they will meet you occasionally via a dependency you add, or one your coding assistant adds for you.&lt;/p&gt;</description></item><item><title>Build Secure AI Chat Applications with BoxLang, RAG, Ollama, and Amazon Bedrock with Dan Card</title><link>https://foojay.io/today/build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock-with-dan-card/</link><pubDate>Thu, 13 Aug 2026 14:52:13 +0000</pubDate><guid>https://foojay.io/today/build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock-with-dan-card/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock-with-dan-card/dancardWorkshop-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="build-secure-ai-chat-applications-with-boxlang-rag-ollama-and-amazon-bedrock"&gt;Build Secure AI Chat Applications with BoxLang, RAG, Ollama, and Amazon Bedrock&lt;/h2&gt;&#10;&lt;p&gt;AI demos are everywhere. Building an AI-powered feature that can securely work with your documents, databases, and real application data is a very different challenge.&lt;/p&gt;&#10;&lt;p&gt;How do you give an AI model access to the right information without exposing sensitive data? Should you use a locally hosted model or a cloud service? How do you move beyond a basic chatbot and build something genuinely useful for your users or organization?&lt;/p&gt;</description></item><item><title>AI Found the Bugs. Who's Patching Your EOL Java Code?</title><link>https://foojay.io/today/ai-found-the-bugs-whos-patching-your-eol-java-code/</link><pubDate>Thu, 23 Jul 2026 15:26:53 +0000</pubDate><guid>https://foojay.io/today/ai-found-the-bugs-whos-patching-your-eol-java-code/</guid><description>&lt;p&gt;Earlier this year an AI model found a flaw in OpenBSD&amp;rsquo;s TCP stack that had been sitting there for 27 years. The same scanning run turned up a 16-year-old bug in FFmpeg&amp;rsquo;s H.264 code.&lt;/p&gt;&#10;&lt;h4 id="how-do-you-feel-about-ai-being-used-to-discover-bugs-in-open-source-across-the-board-and-at-scale"&gt;How do you feel about AI being used to discover bugs in open source, across the board and at scale?&lt;/h4&gt;&#10;&lt;p&gt;Because that&amp;rsquo;s what&amp;rsquo;s happening. It&amp;rsquo;s tough enough dealing with machine-speed vulnerability discovery in code that has active maintainers. What about all the code with no friendly pair of safe hands?&lt;/p&gt;</description></item><item><title>BoxLang AWS, Azure, and Google Secrets Manager Module Released</title><link>https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</link><pubDate>Tue, 21 Jul 2026 11:38:18 +0000</pubDate><guid>https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/boxlang-secrets-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Every production application carries secrets: database passwords, API tokens, encryption keys. The question is never whether to manage them &amp;ndash; it&amp;rsquo;s how badly the current approach is going to hurt you.&lt;/p&gt;&#10;&lt;p&gt;Hardcoded credentials in config files get committed to repos. Environment variables sprawl across deployment pipelines with no audit trail. Custom integration code for each cloud provider means three different patterns to maintain, test, and rotate. And when a key needs to rotate at 2am? Someone is waking up.&lt;/p&gt;</description></item><item><title>This Dependency Update Looked Exactly Like an Account Takeover</title><link>https://foojay.io/today/this-dependency-update-looked-exactly-like-an-account-takeover/</link><pubDate>Fri, 03 Jul 2026 08:31:27 +0000</pubDate><guid>https://foojay.io/today/this-dependency-update-looked-exactly-like-an-account-takeover/</guid><description>&lt;p&gt;I pointed a scanner I have been building at an old Spring project, and it flagged javax.activation. The bump was 1.1-rev-1 to 1.1.1. Prior releases carried a GPG signature. This one did not.&#10;&lt;img src="https://foojay.io/today/this-dependency-update-looked-exactly-like-an-account-takeover/pr-comment-682x510.png" alt="git hub diff comment on PR" width="682" height="510" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;If you have read the post-mortems of real supply-chain attacks, that pattern should make you sit up. A package that has signed its releases for years suddenly ships one unsigned. The boring explanation is a build pipeline change. The other explanation is that a different person is publishing now, and the signing key stayed behind with the old one. When ua-parser-js was hijacked in 2021, the malicious versions came from a compromised account. When event-stream went bad in 2018, it was a new maintainer nobody had vetted. The artifact looks fine. The metadata around it is what changed.&lt;/p&gt;</description></item><item><title>7 Jackson CVEs in One Day: AI-Assisted Security Research</title><link>https://foojay.io/today/7-new-vulnerabilities-in-jackson-in-one-day-this-is-what-ai-assisted-security-research-looks-like/</link><pubDate>Mon, 29 Jun 2026 11:47:41 +0000</pubDate><guid>https://foojay.io/today/7-new-vulnerabilities-in-jackson-in-one-day-this-is-what-ai-assisted-security-research-looks-like/</guid><description>&lt;p&gt;&lt;strong&gt;Quick version check:&lt;/strong&gt; the affected range for all seven is broadly &lt;code&gt;&amp;gt;=2.10.0 =2.19.0 =3.0.0 &amp;lt;3.1.4&lt;/code&gt; — with some CVEs affecting narrower ranges. If you&amp;rsquo;re on a supported release, upgrade to 2.18.8, 2.21.4, or 3.1.4. If you&amp;rsquo;re on an EOL line — 2.13.x, 2.14.x, 2.15.x — jump to the bottom of the page for more specifics or visit &lt;a href="https://docs.herodevs.com/jackson?utm_source=devrel&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026q2_spring-boot-3-5-eol_global" target="_blank" rel="noopener noreferrer"&gt;HeroDevs Jackson Support&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="not-a-sales-pitch"&gt;Not a sales pitch&lt;/h3&gt;&#10;&lt;p&gt;Anyone who knows me knows I dont do that. In this case I&amp;rsquo;m pointing you at &lt;a href="https://docs.herodevs.com/jackson?utm_source=devrel&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026q2_spring-boot-3-5-eol_global" target="_blank" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt; because the Jackson issues are serious, &lt;a href="https://docs.herodevs.com/jackson?utm_source=devrel&amp;amp;utm_medium=referral&amp;amp;utm_campaign=2026q2_spring-boot-3-5-eol_global" target="_blank" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt; have a solution thats stupidly easy to use and I know the folks behind the fixes. It takes a particular type of engineer to create security fixes and I know they have that skillset. Do your own research.&lt;/p&gt;</description></item><item><title>Quarkus Unpacked: Insights from the Foojay Podcast</title><link>https://foojay.io/today/quarkus-unpacked-insights-from-the-foojay-podcast/</link><pubDate>Tue, 23 Jun 2026 12:36:54 +0000</pubDate><guid>https://foojay.io/today/quarkus-unpacked-insights-from-the-foojay-podcast/</guid><description>&lt;figure class="alignleft is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/quarkus-unpacked-insights-from-the-foojay-podcast/3-Quarkus-Unpacked-2-2.jpeg" alt="Quarkus: A Runtime and Framework for Cloud-Native Java" style="width:300px" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;I recently had the pleasure of joining the &lt;a href="https://www.youtube.com/watch?v=_nJCTTrnZkE" target="_blank" rel="noopener noreferrer"&gt;Foojay podcast&lt;/a&gt; to talk about Quarkus in depth. The conversation covered a lot of ground, from what makes Quarkus different to the practical trade-offs between JVM and native mode. This post captures the key questions and answers from that discussion, lightly edited for readability.&lt;/p&gt;&#10;&lt;p&gt;If you have been following this blog series, note that the third installment on building your own stack with Quarkus is coming next. Consider this a bonus entry that distills the podcast conversation into a format you can read, reference, and share.&lt;/p&gt;</description></item><item><title>Did AI Just Break Software Security For Ever?</title><link>https://foojay.io/today/did-ai-just-break-software-security-for-ever/</link><pubDate>Tue, 16 Jun 2026 14:51:04 +0000</pubDate><guid>https://foojay.io/today/did-ai-just-break-software-security-for-ever/</guid><description>&lt;p&gt;Whether the answer is yes or no (read on for my opinion) , something fundamental has changed this year. Not one thing. Four things, converging at once.&lt;/p&gt;&#10;&lt;h3 id="first-the-rate-of-cve-arrivals"&gt;First: The rate of CVE arrivals&lt;/h3&gt;&#10;&lt;p&gt;More than 40,000 CVEs were published in 2024, rising to just under 50,000 in 2025. FIRST — the Forum of Incident Response and Security Teams, &lt;a href="https://www.first.org/blog/20260522-vulnerability-forecast-update" title="projects" target="_blank" rel="noopener noreferrer"&gt;projects&lt;/a&gt; a median of 68,000 for 2026, with realistic scenarios reaching 70,000 to 100,000.&lt;/p&gt;</description></item><item><title>Spring Boot 3.5 Migration and the CRA: When Good Enough Isn't"</title><link>https://foojay.io/today/spring-boot-migration-and-the-cra-when-good-enough-isnt/</link><pubDate>Fri, 05 Jun 2026 08:52:01 +0000</pubDate><guid>https://foojay.io/today/spring-boot-migration-and-the-cra-when-good-enough-isnt/</guid><description>&lt;p&gt;Back in April I &lt;a href="https://foojay.io/today/crossing-the-river-styx-spring-boot-3-5-and-the-zombie-dependency-problem/" title="wrote"&gt;wrote&lt;/a&gt; about what happens to your security posture when Spring Boot 3.5 crosses the EOL line.&lt;/p&gt;&#10;&lt;p&gt;The short version: the CVE pipeline dries up, your scanner goes quiet, and the bad actors keep watching upstream for anything they can exploit downstream against the dead code nobody&amp;rsquo;s patching.&lt;/p&gt;&#10;&lt;p&gt;I called them zombie dependencies.&lt;/p&gt;&#10;&lt;p&gt;June 30th is coming. In a few weeks, Spring Boot 3.5 reaches end of open-source support. You&amp;rsquo;ve either got a plan or you haven&amp;rsquo;t.&lt;/p&gt;</description></item><item><title>Tiberius: A Security Testing Framework for LLM Applications in Java</title><link>https://foojay.io/today/tiberius-a-security-testing-framework-for-llm-applications-in-java/</link><pubDate>Thu, 04 Jun 2026 20:09:09 +0000</pubDate><guid>https://foojay.io/today/tiberius-a-security-testing-framework-for-llm-applications-in-java/</guid><description>&lt;h2 id="tiberius-a-security-testing-framework-for-llm-applications-in-java"&gt;Tiberius: A Security Testing Framework for LLM Applications in Java&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;How do you write a regression test for a system that is non-deterministic by design?&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="1-the-problem"&gt;1. The Problem&lt;/h2&gt;&#10;&lt;p&gt;Large Language Models have moved from research artifacts to production infrastructure. Java applications are embedding them into customer-facing services via Spring Boot, and e.g. LangChain4J — for document summarization, customer support, healthcare assistance, and financial guidance, to name just a few. The deployment surface is growing faster than the security tooling.&lt;/p&gt;</description></item><item><title>Introducing bx-jwt: Enterprise-Grade JSON Web Tokens for BoxLang</title><link>https://foojay.io/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</link><pubDate>Tue, 26 May 2026 10:14:00 +0000</pubDate><guid>https://foojay.io/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/bx-jwt-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;JWT authentication is everywhere. But rolling it correctly — with proper algorithm enforcement, key management, clock skew handling, JWE encryption, and zero security footguns — is anything but trivial. Today, we&amp;rsquo;re shipping &lt;strong&gt;bx-jwt&lt;/strong&gt;, a production-ready JWT/JWE module for BoxLang that handles all of it out of the box, so you can focus on building, not fighting cryptography.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;bx-jwt&lt;/strong&gt; is part of the &lt;a href="https://www.boxlang.io/plans" title="BoxLang&amp;#43; and BoxLang&amp;#43;&amp;#43; subscription tiers" target="_blank" rel="noopener noreferrer"&gt;BoxLang+ and BoxLang++ subscription tiers&lt;/a&gt; — our enterprise-grade module collection built for teams that take security seriously.&lt;/p&gt;</description></item><item><title>BoxLang v1.13.0: Compatibility, Concurrency, and Formatter Maturity</title><link>https://foojay.io/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</link><pubDate>Tue, 19 May 2026 12:11:19 +0000</pubDate><guid>https://foojay.io/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/boxlang-v1.13.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang 1.13.0&lt;/strong&gt; is a stability-first release with deep compatibility work and runtime hardening. This build closes 48 issues, with the majority focused on CFML compatibility edge cases, concurrency correctness, formatting parity, and miniserver/runtime reliability under real production loads.&lt;/p&gt;&#10;&lt;p&gt;While this release is bug-fix heavy, it still introduces several meaningful features and quality-of-life improvements: character-aware trimming, class metadata lookup by absolute path, process environment control in SystemExecute(), SOAP headers, new query column rename capabilities, and safer miniserver routing/security defaults.&lt;/p&gt;</description></item><item><title>Don't Panic: The Thymeleaf Template Injection That Only Hurts If You Let It (CVE-2026-40478)</title><link>https://foojay.io/today/dont-panic-the-thymeleaf-template-injection-that-only-hurts-if-you-let-it-cve-2026-40478/</link><pubDate>Fri, 15 May 2026 15:31:08 +0000</pubDate><guid>https://foojay.io/today/dont-panic-the-thymeleaf-template-injection-that-only-hurts-if-you-let-it-cve-2026-40478/</guid><description>&lt;p&gt;The Thymeleaf vulnerability with a CVSS score of 9.1 grabs your attention, as it should. But before you call the cavalry and claim this as the new Log4shell, read this first.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://security.snyk.io/vuln/SNYK-JAVA-ORGTHYMELEAF-16078379?_gl=1*1at854d*_gcl_aw*R0NMLjE3NzgwMDAzNjIuQ2p3S0NBandxdWJQQmhCT0Vpd0F6Z1pYMnFGMkJrY1V2VEIwbHRsSmMyVVFDeWxCaFJGYng0Yy02SjVIdzdITHJITGFueExTdllmN0tCb0NnNDhRQXZEX0J3RQ..*_gcl_au*MTUyNzYyMTQ0Ny4xNzc1NjU3MzI2*_ga*MTY1NTk4NjI5Ni4xNzc1NjU3MzI3*_ga_X9SH3KP7B4*czE3NzgyNTkzMzMkbzcxJGcxJHQxNzc4MjU5NjMxJGo2MCRsMCRoMA.." target="_blank" rel="noopener noreferrer"&gt;CVE-2026-40478&lt;/a&gt; is a server-side template injection vulnerability in Thymeleaf &lt;a href="https://vipentest.com/blog/cve-2026-40478-thymeleaf-ssti-sandbox-escape-rce/" target="_blank" rel="noopener noreferrer"&gt;discovered by pentester Dawid Bakaj&lt;/a&gt;. Thymeleaf is a templating engine in Java that is used for server-side webpage rendering. The sandbox that normally prevents arbitrary code execution got bypassed using a tab character. And yes, this can lead to a remote code execution if exploited.&lt;/p&gt;</description></item><item><title>Foojay Podcast #95: Is Your Java App Actually Secure, Or Does It Just Look That Way?</title><link>https://foojay.io/today/foojay-podcast-95/</link><pubDate>Mon, 11 May 2026 09:57:00 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-95/</guid><description>&lt;p&gt;Is your Java application actually secure, or does it just look that way? In this episode of the Foojay Podcast, Frank is joined by Steve Poole and David Welch, both from &lt;a href="https://www.herodevs.com/" target="_blank" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt;, to dig deep into the state of Java security in 2025 and beyond.&lt;/p&gt;&#10;&lt;p&gt;Steve introduces the concept of zombie dependencies: end-of-life libraries that appear safely dormant but are quietly accumulating vulnerabilities waiting to bite you. David, a co-chair of the CVE Automation Working Group, explains what a CVE actually is, how the identification and disclosure process works in practice, and why AI tools like Mythos are dramatically accelerating the pace at which new vulnerabilities are found — on both sides of the wall.&lt;/p&gt;</description></item><item><title>Spring Boot 3.5 EOL — The CVE Blind Spot Nobody Talks About</title><link>https://foojay.io/today/crossing-the-river-styx-spring-boot-3-5-and-the-zombie-dependency-problem/</link><pubDate>Sun, 19 Apr 2026 13:37:13 +0000</pubDate><guid>https://foojay.io/today/crossing-the-river-styx-spring-boot-3-5-and-the-zombie-dependency-problem/</guid><description>&lt;p&gt;Tomorrow I start (o so early) for &lt;a href="https://2026.europe.jcon.one/" target="_blank" rel="noopener noreferrer"&gt;JCON Europe&lt;/a&gt; in Cologne and then, at the tail end of the week, go to Devoxx France to give more talks. If you&amp;rsquo;re at either, come say hi. Herodevs has a booth at both.&lt;/p&gt;&#10;&lt;p&gt;After digging into the CVE stories behind &lt;a href="https://foojay.io/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/"&gt;Tomcat 8.5&amp;rsquo;s end of life&lt;/a&gt;, I turned my attention to Spring Boot 3.5. Same question, different framework: what &lt;em&gt;actually&lt;/em&gt; happens to your security posture when a project crosses the EOL line?&lt;/p&gt;</description></item><item><title>Why Java Developers Over-Trust AI-Generated Code</title><link>https://foojay.io/today/why-java-developers-over-trust-ai-dependency-suggestions/</link><pubDate>Thu, 09 Apr 2026 10:45:36 +0000</pubDate><guid>https://foojay.io/today/why-java-developers-over-trust-ai-dependency-suggestions/</guid><description>&lt;p&gt;&lt;em&gt;This article is adapted from &lt;a href="https://noregressions.substack.com/p/the-confidence-trap-why-developers" target="_blank" rel="noopener noreferrer"&gt;The Confidence Trap&lt;/a&gt;, part of the &amp;ldquo;2026 Supply Chain Reckoning&amp;rdquo; series on my No Regressions newsletter.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Your boss calls you on a Friday afternoon. He&amp;rsquo;s read all the available data, he tells you with absolute confidence, and he&amp;rsquo;s decided that migrating from Spring Boot 3.5 to 4.0 will be straightforward. Wants it done over the weekend.&lt;/p&gt;&#10;&lt;p&gt;You&amp;rsquo;d push back. You&amp;rsquo;d ask which data. You&amp;rsquo;d point out the breaking changes.&lt;/p&gt;</description></item><item><title>Best practices for Mastering AI Agents, Subagents, Skills &amp; MCP</title><link>https://foojay.io/today/best-practices-for-working-with-ai-agents-subagents-skills-and-mcp/</link><pubDate>Mon, 30 Mar 2026 18:55:59 +0000</pubDate><guid>https://foojay.io/today/best-practices-for-working-with-ai-agents-subagents-skills-and-mcp/</guid><description>&lt;p&gt;A practical guide to the five best practices every developer should apply when working with AI agents, subagents, skills and MCP servers — from choosing the right model and writing precise prompts, to defining agent behaviour with SDD, isolating context with Claude Code subagents, securing MCP calls, and guiding agent response quality with guardrails.&lt;/p&gt;&#10;&lt;h2 id="0--where-this-fits-in-the-series"&gt;§0 📖 Where This Fits in the Series&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;This article assumes you already know what MCP is and have used or built at least one Agent.&lt;/p&gt;</description></item><item><title>DPoP: What It Is, How It Works, and Why Bearer Tokens Aren't Enough</title><link>https://foojay.io/today/dpop-what-it-is-how-it-works-and-why-bearer-tokens-arent-enough/</link><pubDate>Mon, 09 Mar 2026 08:08:06 +0000</pubDate><guid>https://foojay.io/today/dpop-what-it-is-how-it-works-and-why-bearer-tokens-arent-enough/</guid><description>&lt;p&gt;DPoP is one of the most exciting developments in the IAM (Identity and Access Management) space in recent years. Yet many backend developers either have not heard of it or are unsure what it actually changes. In this article, I will break down what DPoP is, what problem it solves, and walk through a working implementation with Keycloak and Quarkus.&lt;/p&gt;&#10;&lt;h2 id="what-is-dpop"&gt;What is DPoP?&lt;/h2&gt;&#10;&lt;p&gt;DPoP (Demonstration of Proof-of-Possession) is an OAuth 2.0 security mechanism defined in &lt;a href="https://datatracker.ietf.org/doc/html/rfc9449" target="_blank" rel="noopener noreferrer"&gt;RFC 9449&lt;/a&gt;. Its core purpose is simple: cryptographically bind an access token to the client that requested it. This way, even if a token is intercepted, it cannot be used by another client.&lt;/p&gt;</description></item><item><title>Tomcat TLSv1.3 cipher configuration</title><link>https://foojay.io/today/tomcat-tlsv13-cipher-configuration-spring-boot/</link><pubDate>Thu, 26 Feb 2026 18:02:34 +0000</pubDate><guid>https://foojay.io/today/tomcat-tlsv13-cipher-configuration-spring-boot/</guid><description>&lt;p&gt;A recent update to Apache Tomcat introduced a subtle but significant change to how TLS cipher suites are configured. If your Spring Boot application explicitly configures TLS ciphers, particularly TLSv1.3 ciphers, and runs on Tomcat 9.0.115+ (Spring Boot 2.x), 10.1.52+ (Spring Boot 3.x), or 11.0.18+ (Spring Boot 4.x), your cipher configuration may be silently ignored.&lt;/p&gt;&#10;&lt;p&gt;Prior to the change, Tomcat used a single &lt;code&gt;ciphers&lt;/code&gt; attribute on the SSL connector to configure cipher suites for all TLS versions. Starting with the versions of Tomcat listed above (Tomcat &lt;a href="https://github.com/apache/tomcat/commit/9abf6bddb2e84ecf1668780bb3150b799f832ccf" target="_blank" rel="noopener noreferrer"&gt;commit&lt;/a&gt;), this attribute was split:&lt;/p&gt;</description></item><item><title>Shai-Hulud and the npm Worm: How Speed-Optimised Dev Ecosystems Made a Self-Propagating Supply Chain Attack Inevitable</title><link>https://foojay.io/today/the-shai-hulud-cyber-worm-and-more-thoughts-on-supply-chain-attacks/</link><pubDate>Thu, 12 Feb 2026 11:47:48 +0000</pubDate><guid>https://foojay.io/today/the-shai-hulud-cyber-worm-and-more-thoughts-on-supply-chain-attacks/</guid><description>&lt;h2 id="first-a-word-about-ecosystems"&gt;first, a word about ecosystems&lt;/h2&gt;&#10;&lt;p&gt;Before we dive into Shai-Hulud, before we label it &amp;ldquo;sophisticated&amp;rdquo; or &amp;ldquo;advanced&amp;rdquo; or &amp;ldquo;next generation,&amp;rdquo; we need to be honest about something.&lt;/p&gt;&#10;&lt;p&gt;The worm didn&amp;rsquo;t appear in a broken system. It appeared in the one we deliberately optimised.&lt;/p&gt;&#10;&lt;p&gt;In the book Dune, the worm is integral to the ecosystem. The planet, its environment, and the worms are deeply interconnected.&lt;/p&gt;&#10;&lt;p&gt;That&amp;rsquo;s true for the cyber-worm equivalent. The worm is an entirely predictable outcome of the ecosystem in which we, as developers, are part&lt;/p&gt;</description></item><item><title>Security Doesn’t Start at Liftoff</title><link>https://foojay.io/today/security-doesnt-start-at-liftoff/</link><pubDate>Fri, 23 Jan 2026 10:22:31 +0000</pubDate><guid>https://foojay.io/today/security-doesnt-start-at-liftoff/</guid><description>&lt;p&gt;This is a follow-on to the article &lt;a href="https://foojay.io/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/"&gt;The Real Mechanics of Vulnerabilities in an Upstream/Downstream, Topsy-Turvy EOL World&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h4 id="what-youll-learn-in-this-article"&gt;What you&amp;rsquo;ll learn in this article:&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;The Security Timeline Inversion&lt;/strong&gt;: CVE disclosure is no longer the true start of the security timeline.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Security Outcomes&lt;/strong&gt;: Routine maintenance decisions, not reaction speed or tooling, determine security outcomes.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Flawed Indicators&lt;/strong&gt;: CVE scores, scanners, and compliance deadlines are not effective early-warning systems.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Vulnerability Distortion&lt;/strong&gt;: Embedded, forked, and end-of-life components obscure vulnerability visibility and responsibility.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Your Mission&lt;/strong&gt;: Governance and lifecycle changes are necessary to avoid being structurally late to &amp;ldquo;silent&amp;rdquo; vulnerabilities.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="are-you-sitting-comfortably"&gt;Are you sitting comfortably?&lt;/h2&gt;&#10;&lt;p&gt;In February 2025, Apache Tomcat shipped a set of routine point releases. They arrived without urgency, without commentary, and without the kind of noise that can accompany significant security incidents.&lt;/p&gt;</description></item><item><title>SonarQube AI Code Assurance &amp; MCP: Auto-Fix Java (Part 4)</title><link>https://foojay.io/today/sonarqube-part-4-ai-code-assurance/</link><pubDate>Mon, 19 Jan 2026 15:27:14 +0000</pubDate><guid>https://foojay.io/today/sonarqube-part-4-ai-code-assurance/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;&#10;&lt;p&gt;Welcome to the &lt;strong&gt;Grand Finale&lt;/strong&gt; of our series.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojay.io/today/developers-guide-to-sonarqube-part-1/"&gt;Part 1&lt;/a&gt;&lt;/strong&gt;: We turned your IDE into a fortress.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojay.io/today/developers-guide-to-sonarqube-part-2/"&gt;Part 2&lt;/a&gt;&lt;/strong&gt;: We synced the team with Connected Mode.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://foojay.io/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/"&gt;Part 3&lt;/a&gt;&lt;/strong&gt;: We secured the Supply Chain (dependencies).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;We have become excellent at &lt;em&gt;finding&lt;/em&gt; bugs. But let&amp;rsquo;s be honest: Finding them is only half the battle. &lt;strong&gt;Who is going to fix them?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;We are drowning in a backlog of &amp;ldquo;Technical Debt,&amp;rdquo; &amp;ldquo;Code Smells,&amp;rdquo; and &amp;ldquo;Security Hotspots.&amp;rdquo; You don&amp;rsquo;t have enough hours in the day to refactor every complex method or research the perfect fix for a regex denial-of-service vulnerability.&lt;/p&gt;</description></item><item><title>Optimizing Java for the Cloud-Native Era with Quarkus</title><link>https://foojay.io/today/optimizing-java-for-the-cloud-native-era-with-quarkus/</link><pubDate>Tue, 06 Jan 2026 21:09:00 +0000</pubDate><guid>https://foojay.io/today/optimizing-java-for-the-cloud-native-era-with-quarkus/</guid><description>&lt;p&gt;This article explores how Quarkus can help organizations reduce costs, streamline development, and modernize their Java applications for today&amp;rsquo;s cloud-native environments. It outlines the real-world benefits of adopting Quarkus and highlights how its core features address the performance and scalability challenges commonly associated with traditional Java frameworks.&lt;/p&gt;&#10;&lt;p&gt;Quarkus is already being adopted across industries. One example is Orange, a global telecom provider that selected Quarkus to support its 5G API initiative, and benefited from fast startup times, a lightweight footprint, and seamless integration with Kubernetes.&lt;/p&gt;</description></item><item><title>Quarkus: A Runtime and Framework for Cloud-Native Java</title><link>https://foojay.io/today/quarkus-a-runtime-and-framework-for-cloud-native-java/</link><pubDate>Tue, 06 Jan 2026 13:46:50 +0000</pubDate><guid>https://foojay.io/today/quarkus-a-runtime-and-framework-for-cloud-native-java/</guid><description>&lt;p&gt;Public clouds such as AWS, Microsoft Azure, and Google Cloud, and platforms like Red Hat OpenShift, favor services that start fast and stay lean. Quarkus is engineered for exactly that.&lt;/p&gt;&#10;&lt;p&gt;Build time processing reduces runtime overhead and results in rapid startup, a small memory footprint, and frictionless deployment across Kubernetes, OpenShift, serverless, and managed container services in any cloud. If your Java services need to start in milliseconds, run dense on shared nodes, and still feel great to build, Quarkus was made for that job.&lt;/p&gt;</description></item><item><title>Stop the trojan horse in your pom: SonarQube Advace Security</title><link>https://foojay.io/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/</link><pubDate>Mon, 22 Dec 2025 10:42:41 +0000</pubDate><guid>https://foojay.io/today/avoid-the-trojan-horse-in-your-pom-xml-sonarqube-advanced-security-part-3/</guid><description>&lt;p&gt;Hola Java developers! 👋&lt;/p&gt;&#10;&lt;p&gt;Welcome to &lt;strong&gt;Part 3&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;In &lt;a href="https://foojay.io/today/developers-guide-to-sonarqube-part-1/"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/a&gt;, we turned your IntelliJ into a security guard.&lt;/li&gt;&#10;&lt;li&gt;In &lt;a href="https://foojay.io/today/developers-guide-to-sonarqube-part-2/"&gt;&lt;strong&gt;Part 2&lt;/strong&gt;&lt;/a&gt;, we connected it to the server to enforce the Quality Gate.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;We are feeling good. Our code is high quality. Our logic is sound. But here is the scary reality: In a modern Spring Boot application, &lt;strong&gt;you only wrote about 10% of the code.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;The other 90%? It comes from Maven Central. It&amp;rsquo;s Hibernate, Jackson, Apache Commons, Spring Security&amp;hellip; You are building a house, and you made sure &lt;em&gt;your&lt;/em&gt; bricks are solid. But did you check if the foundation you bought from a stranger is made of explosive material? 🧨&lt;/p&gt;</description></item><item><title>The Real Mechanics of Vulnerabilities in an Upstream/Downstream, Topsy-Turvy EOL World</title><link>https://foojay.io/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/</link><pubDate>Fri, 19 Dec 2025 13:36:28 +0000</pubDate><guid>https://foojay.io/today/the-real-mechanics-of-vulnerabilities-in-an-upstream-downstream-topsy-turvy-eol-world/</guid><description>&lt;h3 id="in-this-article-youll-learn"&gt;In this article you&amp;rsquo;ll learn&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Why CVEs record that a vulnerability exists, not that a usable fix exists&lt;/li&gt;&#10;&lt;li&gt;How vulnerabilities are often discovered and fixed downstream before upstream ever acknowledges them&lt;/li&gt;&#10;&lt;li&gt;Why EOL branches continue to accumulate exploitable behaviour even when no CVEs appear&lt;/li&gt;&#10;&lt;li&gt;How downstream-only patches break the assumptions scanners and SBOMs rely on&lt;/li&gt;&#10;&lt;li&gt;What disclosure actually enables when &amp;ldquo;just upgrade&amp;rdquo; is not a viable option&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;&#10;&lt;p&gt;There is a tidy, almost academic version of how software security is supposed to work. It appears in conference talks, compliance documents and in the cheerful diagrams seen on marketing slides. It usually looks something like this:&lt;/p&gt;</description></item><item><title>The 5 Knights of the MCP Apocalypse</title><link>https://foojay.io/today/the-5-knights-of-the-mcp-apocalypse/</link><pubDate>Tue, 09 Dec 2025 15:55:41 +0000</pubDate><guid>https://foojay.io/today/the-5-knights-of-the-mcp-apocalypse/</guid><description>&lt;p&gt;Let&amp;rsquo;s talk about that new &lt;strong&gt;MCP (Model Context Protocol) Server&lt;/strong&gt; your team is using to connect to your real data services. It&amp;rsquo;s awesome, right? It&amp;rsquo;s the &amp;ldquo;magic box&amp;rdquo; that gives your AI Agent access to the &lt;strong&gt;real world&lt;/strong&gt;—live databases, internal APIs, and all your tools.&lt;/p&gt;&#10;&lt;p&gt;But here&amp;rsquo;s the catch: &lt;strong&gt;you don&amp;rsquo;t own the code.&lt;/strong&gt; 🚫&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s a vendor product, an open-source project, or another team&amp;rsquo;s platform. You can&amp;rsquo;t just change its code when you find a security hole, unless you have the code and recompile it and deploy it.&lt;/p&gt;</description></item><item><title>Java Security Starts with the JVM</title><link>https://foojay.io/today/java-security-starts-with-the-jvm/</link><pubDate>Mon, 10 Nov 2025 12:37:20 +0000</pubDate><guid>https://foojay.io/today/java-security-starts-with-the-jvm/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;When it comes to Java security, the first thing that comes to mind should be the JVM. If you&amp;rsquo;re relying on outdated, unpatched, or unsupported Java runtimes, you&amp;rsquo;re taking unnecessary risks.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;strong&gt;In this article, you will learn:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;Timely, predictable updates are critical for Java security&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;Long-term security hinges on long-term support&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;If your Java runtime is compromised, every application that runs on it could be compromised too&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;As environments become cluttered with multiple JDK versions and unpatched workloads, organizations lose visibility into what&amp;rsquo;s deployed&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;When it comes to securing your Java applications, the JVM might not be the first thing that comes to mind—but it should be. Your JDK isn&amp;rsquo;t just a runtime; it&amp;rsquo;s part of your software supply chain. If you&amp;rsquo;re relying on outdated, unpatched, or unsupported Java runtimes, you&amp;rsquo;re taking unnecessary risks.&lt;/p&gt;</description></item></channel></rss>