Install
Works with Drupal: ^10.3 || ^11 || ^12Using Composer to manage Drupal site dependencies
Alternative installation files
Download tar.gz
26.84 KB
MD5: e6f53846fe6d26c4def50062a29e36d2
SHA-1: 3edf7837b48d8c66652d0112fa6114ef86559c00
SHA-256: 2d860d37b2c0108dc020c1a6af15dcd721f27ddc75096aa77c99334dfd26246b
Download zip
40.39 KB
MD5: dad9103636ea58953f8d9f5c9b194935
SHA-1: 84b7ed12603f42e89e877b0e3a53e8fc7337f572
SHA-256: 3a0dd7db4d69833792d38e3471d203b2b9b9729a0a79fdddda45cde52fecd51d
Release notes
Security fixes
-
#3592563:
Internal newlines invalueandnameallowed
line injection in downstream multi-key consumers. Both fields used to
accept any internal ASCII control character (C0 range + DEL). The
constraint validator's strictbase64_decodeblocked
control chars in the key portion ofvalue, but the
comment portion was unconstrained — andnameonly had a
Length constraint, so JSON:API, REST, migration, and programmatic
setValuecould all bypass the textfield widget. A consumer
that\n-joined multiple entries (e.g. building
authorized_keys) then saw the embedded newline split a
single field across two lines, the second of which could carry an
attacker-controlled extra SSH key.SshKeyItem::onChange()
now normalizes on write: control characters invalueare
replaced with a single space (regular spaces survive, so multi-word
comments are preserved);namehas any run of control or
whitespace characters collapsed to a single space. NUL truncation in
C-based tooling and ANSI escape sequences in admin-facing displays
are also defended against by the same change.
Bug fixes
-
#3592555:
valueused to preserve the textarea widget's trailing
newline (and any leading whitespace from accidental indent paste).
Most callers ignored it becauseUtils::initialize()
splits on space, but consumers building a multi-key
\n-joined blob saw a phantom line at every boundary, and
downstream parsers (e.g.ansible.posix.authorized_key)
rejected it with"invalid key specified".
SshKeyItem::onChange()now trims surrounding whitespace
before fingerprint and name derivation, so the stored row is clean
for every entry point — widget, programmaticsetValue,
JSON:API, migration.
API changes
None. value and name are still strings; they just no longer carry surrounding
whitespace or internal control characters.
Data model changes
None at the schema level. Existing rows with bad whitespace will normalize on their next save. The bug
only manifests when a downstream consumer is newline-joining multiple values, so no migration is strictly
required.
Upgrade notes
No manual steps required.