Install

Works with Drupal: ^10.3 || ^11 || ^12

Using 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 in value and name allowed
    line injection in downstream multi-key consumers. Both fields used to
    accept any internal ASCII control character (C0 range + DEL). The
    constraint validator's strict base64_decode blocked
    control chars in the key portion of value, but the
    comment portion was unconstrained — and name only had a
    Length constraint, so JSON:API, REST, migration, and programmatic
    setValue could 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 in value are
    replaced with a single space (regular spaces survive, so multi-word
    comments are preserved); name has 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:
    value used to preserve the textarea widget's trailing
    newline (and any leading whitespace from accidental indent paste).
    Most callers ignored it because Utils::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, programmatic setValue,
    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.

Created by: colan
Created on: 28 May 2026 at 14:45 UTC
Last updated: 28 May 2026 at 14:45 UTC
Bug fixes

Other releases