‹ Back to Blog

This Week in Open Source: September 21, 2026

Newsletters PHP Python Node.js

The OAuth/OIDC hardening trend from last week’s roundup didn’t stop, it kept going. Symfony shipped two more OIDC features, Doorkeeper merged a token-lifetime cap for public clients, and Mongoid quietly patched four real security issues in one release. Alongside that, Predis officially shipped the CRLF-smuggling fix from two weeks ago, and openai-python 3.17.0 is queued up with a genuine breaking change.

Highlights

PHP

Predis v3.6.1 is officially out, packaging the CRLF command-smuggling and node-misrouting fix (CVE GHSA-w6f5-v2h6-g786) we covered when it merged, plus a deprecation of CommandInterface::deserializeCommand() as part of closing that gap. If you update Predis on a schedule rather than watching CVEs directly, this release is the one to grab. Twig 3.29.0 landed a denser-than-usual minor release: a macro call redesign, three new deprecations pointing at Twig 4.0 (parentheses-less macro calls, duplicate macro definitions, prefixed definedness checks), and Sandbox becoming a first-class class instead of living implicitly inside the environment.

Python

openai-python has a real breaking change queued: 3.17.0 requires local shell tool output to declare call IDs, alongside a pile of new features (external storage config, safety case retrieval, SIP media security). Anthropic’s Python SDK 1.7.0 adds compact_before_next_turn() to the tool runner and starts deprecating group_type on rate limits in favor of a display_name field.

Node.js

Anthropic’s TypeScript SDK 0.127.0 mirrors the Python 1.7.0 release, plus a real correctness fix: the client no longer retries requests whose body is a stream or iterator (retrying a consumed stream silently corrupted the retry). OpenAI’s Node SDK shipped three releases this week (7.18, 7.19, 7.20) covering agent session settings, webhook endpoint management, and a deprecated MCP connector_id.

Also Noteworthy

Mongoid 8.1.13/9.0.12/9.1.1, openai-python 3.16.1/3.16.2, NestJS 12.0.4, and BullMQ patch releases rounded out the week without requiring action.

Recently Merged

Mongoid 7.6.2 is the standout: a “patch” release that actually closes four real security gaps at once. In-memory regex queries are now time-capped (closing a ReDoS-style CPU exhaustion path), $where and other JavaScript-operator queries are rejected by default at any nesting depth (closing a classic NoSQL injection vector across where, find_by, or, and, and more), nested attribute IDs now resolve within their actual association instead of falling back to a collection-wide lookup, and field names in in-memory queries are read as data instead of dispatched as method calls. If you’re running Mongoid, this is worth updating for even though the version number doesn’t say “security.”

Doorkeeper merged an opt-in public_client_access_token_expires_in option that caps token lifetime for non-confidential OAuth clients across every grant type, directly implementing OAuth 2.1’s guidance to limit exposure for unauthenticated clients. It also closes a real gap: the refresh_token grant previously inherited the TTL of the token being refreshed, so a never-expiring token could keep renewing itself indefinitely. Separately, a one-line Karafka README fix surfaced something worth knowing on its own: Karafka now ships first-party instrumentation listeners for AppSignal, Datadog, Kubernetes, and (as of the still-unreleased 2.6.2) New Relic. Scout has no equivalent listener for Karafka today.

In Development

The OIDC hardening theme continues: Symfony has two open PRs adding Form Post Response Mode support (so providers can POST the authorization response instead of redirecting with it in the query string) and Back-Channel Logout support (so an OIDC provider can tell Symfony a session ended without routing through the user’s browser at all) to its oidc_login authenticator. Doorkeeper has an open PR adding support for Pushed Authorization Requests. And a detailed community threat-model writeup argues that the MCP TypeScript and Python SDKs’ Origin header validation, built to stop DNS-rebinding attacks against unauthenticated local servers, has the side effect of rejecting legitimate authenticated requests from browser-based MCP clients while letting native clients with no Origin header through unchecked.

What We’re Watching

Two weeks running now, the pattern holds: OAuth/OIDC and MCP auth flows are getting hardened across ecosystems in parallel, mostly without a single named CVE driving it. Worth treating as a standing prompt to check your own auth integrations rather than waiting for an advisory.

Try Scout APM

If you’re running any of the frameworks above in production, Scout gives you the performance and error visibility to catch regressions before your users do, across Ruby, Python, Node.js, PHP, and Elixir. Start a free trial.

For application monitoring with errors, logs, and traces, Scout Monitoring provides the fastest insights without the bloat.