<?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>Fri, 23 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/security/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Secure a Spring Boot Application with OpenID Connect and pac4j</title><link>https://foojay.io/today/how-to-secure-a-spring-boot-application-with-openid-connect-and-pac4j/</link><pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/how-to-secure-a-spring-boot-application-with-openid-connect-and-pac4j/</guid><description>&lt;p&gt;&lt;a href="https://www.pac4j.org/" target="_blank" rel="noopener noreferrer"&gt;pac4j&lt;/a&gt; is an open-source Java security library for authentication and authorization. It supports protocols such as OpenID Connect, OAuth 2.0, SAML and CAS, with integrations for multiple Java web frameworks. I am Jérôme LELEU, the maintainer of pac4j. In this tutorial, we will use its OpenID Connect client with Spring Boot.&lt;/p&gt;&#10;&lt;p&gt;You want users to sign in to your Java application with Keycloak, Google, Microsoft Entra ID, Okta, Auth0 or even a CAS server. They already have an account there, so your application should not ask them for another password.&lt;/p&gt;</description></item><item><title>OWASP Java Security Libraries: Please Update!</title><link>https://foojay.io/today/owasp-java-security-libraries-please-update/</link><pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/owasp-java-security-libraries-please-update/</guid><description>&lt;p&gt;Hello Foojay!&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been working hard on bringing two Java security libraries up to date: &lt;strong&gt;OWASP Java Encoder&lt;/strong&gt; and &lt;strong&gt;OWASP Java HTML Sanitizer&lt;/strong&gt;. These libraries are still used in a lot of applications and security products around the world. Both have fresh releases, and I&amp;rsquo;d love to get more Java developers looking at them again.&lt;/p&gt;&#10;&lt;p&gt;My request is pretty simple: &lt;strong&gt;please update if you use these!&lt;/strong&gt; And if they matter to your application, I&amp;rsquo;d love your feedback.&lt;/p&gt;</description></item><item><title>Scraping websites and bot-protection</title><link>https://foojay.io/today/bypass-bot-protection/</link><pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/bypass-bot-protection/</guid><description>&lt;p&gt;While searching for my ancestors, I had to access data from many different websites. I noticed there were different levels of protection against automated access depending on the site. In this post, I&amp;rsquo;ll list them and mention countermeasures you can take to bypass them anyway.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; As a private person using the data for my own personal use, I have no qualms about bypassing the protection. It can be considered fair use. However, I don&amp;rsquo;t know about your context, and I&amp;rsquo;m not saying you should. Scrape responsibly.&lt;/p&gt;</description></item><item><title>Keep WordPress If You're Looking for Trouble... Or Read This!</title><link>https://foojay.io/today/keep-wordpress-if-youre-looking-for-trouble/</link><pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/keep-wordpress-if-youre-looking-for-trouble/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;&lt;em&gt;I wrote this article by hand. AI was used to review grammar, style, and fact-check the data.&lt;/em&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;WordPress made it easy for anyone to build a website. So easy that &lt;a href="https://w3techs.com/technologies/details/cm-wordpress" target="_blank" rel="noopener noreferrer"&gt;43% of the web&lt;/a&gt; runs on it. Twenty years later, it&amp;rsquo;s just as easy for anyone to break into one. If that sounds dramatic, keep reading. You can also &lt;a href="https://foojay.io/today/foojay-podcast-102/"&gt;listen to our podcast&lt;/a&gt; on the topic.&lt;/p&gt;&#10;&lt;p&gt;11K plugin vulnerabilities in 2025/26 (+42% YoY), exploit time on critical vulnerabilities: 5 hours (&lt;a href="https://patchstack.com/whitepaper/state-of-wordpress-security-in-2026/" target="_blank" rel="noopener noreferrer"&gt;source&lt;/a&gt;). The question is not if they can pwn your website, it is when.&lt;/p&gt;</description></item><item><title>Introducing cbGenesis: The AI-Native ColdBox Starter for BoxLang</title><link>https://foojay.io/today/introducing-cbgenesis-ai-native-coldbox-starter-for-boxlang/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introducing-cbgenesis-ai-native-coldbox-starter-for-boxlang/</guid><description>&lt;p&gt;&lt;strong&gt;Ortus Solutions today announces the general availability of &lt;a href="https://cbgenesis.coldbox.org" target="_blank" rel="noopener noreferrer"&gt;cbGenesis 1.0&lt;/a&gt;, a production-ready ColdBox HMVC starter template for BoxLang, and the first one designed from day one to be built &lt;em&gt;with&lt;/em&gt; an AI coding agent, not just &lt;em&gt;by&lt;/em&gt; one.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wbiZTAPrYQs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="Introducing cbGenesis"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;p&gt;For twenty years, &lt;strong&gt;ColdBox&lt;/strong&gt; has been one of the most battle-tested HMVC frameworks in the CFML and BoxLang world. &lt;strong&gt;cbGenesis&lt;/strong&gt; takes that foundation and ships the part every team rebuilds by hand: authentication, permissions, security hardening, an admin panel, tests, and the guidance an AI agent needs to extend all of it correctly.&lt;/p&gt;</description></item><item><title>Foojay Podcast #102: Why Foojay Walked Away From WordPress for Static Sites</title><link>https://foojay.io/today/foojay-podcast-102/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-102/</guid><description>&lt;p&gt;Foojay.io quietly moved off WordPress and onto Hugo, a static site generator. No more CMS login, no database, no admin panel — just Markdown and AsciiDoc files, built and deployed straight from GitHub. In this episode we dig into why that move happened, and into the bigger question behind it: is a traditional CMS still the right way to run a content site in 2026, or has static tooling caught up? Along the way we go through the real security numbers behind WordPress&amp;rsquo;s plugin ecosystem — more than 10,000 vulnerabilities found in WordPress plugins since 2025 alone — and put very different static site generators head to head: Hugo and Jekyll, the veterans, versus Roq, the Java-and-Quarkus-based newcomer.&lt;/p&gt;</description></item><item><title>How much will post-quantum migration cost your Java codebase?</title><link>https://foojay.io/today/how-much-will-post-quantum-migration-cost-your-java-codebase/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/how-much-will-post-quantum-migration-cost-your-java-codebase/</guid><description>&lt;p&gt;The post-quantum transition has stopped being a research topic and become a set of dates. NIST finalized ML-KEM (FIPS 203), ML-DSA (FIPS 204) and SLH-DSA (FIPS 205) in August 2024. NIST IR 8547 deprecates RSA, ECDSA, (EC)DH and the rest after 2030 and disallows them after 2035, and similar timelines are turning up in government guidance elsewhere.&lt;/p&gt;&#10;&lt;p&gt;So the destination is settled. For most Java teams the hard question is not &lt;em&gt;what&lt;/em&gt; to migrate to. It is &lt;em&gt;how much&lt;/em&gt; the migration will cost for their specific codebase, and where the expensive parts are hiding. That question has been oddly hard to answer, and most of the post-quantum migration tooling I could find targets C, C++ and Rust, even though a great deal of enterprise cryptography runs on the JVM.&lt;/p&gt;</description></item><item><title>BoxLang AI 3.4.0: Gateways, Human-in-the-Loop, and a Full Security Stack</title><link>https://foojay.io/today/boxlang-ai-340-gateways-hitl-security/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-340-gateways-hitl-security/</guid><description>&lt;p&gt;BoxLang AI 3.4.0 is a major release centered on a single theme: &lt;strong&gt;trust&lt;/strong&gt;. AI agents operating in real applications need ways to involve people in consequential decisions and manage potentially untrusted inputs. This release introduces gateways, a restructured Human-in-the-Loop subsystem with durable decisions, layered security controls, batched approvals, normalized provider reasoning, and broader AWS Bedrock support.&lt;/p&gt;&#10;&lt;p&gt;The sections below follow the original &lt;a href="https://www.ortussolutions.com/blog/boxlang-ai-340-gateways-human-in-the-loop-and-a-full-security-stack" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI 3.4.0 release announcement&lt;/a&gt; and preserve &lt;strong&gt;all its code examples&lt;/strong&gt;. For the complete change log, see the &lt;a href="https://ai.ortusbooks.com/readme/release-history/3.4.0" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI 3.4.0 release history&lt;/a&gt;.&lt;/p&gt;</description></item><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></channel></rss>