Security fixes for the old versions people still run

A GitLab Duo agent ports security fixes to old release lines of ws where git cherry-pick fails. CI decides what is affected and checks every patch; a human approves every step. This page is rebuilt by the pipeline from live data.

The real fix for CVE-2024-37890 on an import of ws (MIT). Project ยท Tracking issues #2, #5

5 of 5shipped packages that answer the exploit with a 400, checked at build time
3 of 3lines where the agent made the maintainer's call on the client-side hunk, the one real judgement (12 of 12 file decisions in total)
0reads of the maintainer's backports, in 103 agent tool calls (traces)
0unapproved actions, of 15 that changed the repo or shipped
15 of 22real ws backports where plain cherry-pick conflicts

The agent's backports, graded against the real maintainer

The maintainer's own backports from 2024 are the answer key. The interesting call is the client-side hunk in lib/websocket.js: needed on 7.x, not reachable on 6.x and 5.x.

LineClient hunk: agentClient hunk: maintainerSame file decisionsMaintainer's tests passTests brokenCrash goneSame code textShipped package, checked now
v7.x kept kept 4 of 4 2 of 2 0 yes 38% @aryan-group7171043/ws@7.5.10 yes
v6.x dropped dropped 4 of 4 1 of 1 0 yes 0% @aryan-group7171043/ws@6.2.3 yes
v5.x dropped dropped 4 of 4 1 of 1 0 yes 17% @aryan-group7171043/ws@5.2.4 yes

Same code text is reported for transparency, not as a score: the agent wrote the same logic in different words. Behaviour, the maintainer's tests and the file decisions decide whether a patch is right.

Next: lines nobody else will fix, and a second CVE

Upstream stopped maintaining v4.x and v3.x in 2018 and 2017, so no maintainer backport of CVE-2024-37890 exists for them. Both crash on the exploit and conflict on cherry-pick (tracking issue #5). A second, larger fix, CVE-2026-48779, is defined and detected on every line but not yet backported.

2 of 2end-of-life lines backported so far; 0.92M downloads last week
5shipped packages still to receive CVE-2026-48779

Lines nobody else will fix

Upstream stopped maintaining these lines years before the CVE, so the maintainer never backported it and there is no answer key. The agent's patch is checked without one: the crash must be gone, no test of the line may newly fail, and the agent's new tests must fail on the unpatched line.

LineUpstream support endedCrash goneTests brokenNew tests that fail without the fixShipped package, checked now
v4.x 2018-02-22 yes 0 1 of 1 @aryan-group7171043/ws@4.1.1 yes
v3.x 2017-12-17 yes 0 1 of 1 @aryan-group7171043/ws@3.3.4 yes

Approval ledger

Every action in the backport workflow: 15 changed a release line or shipped a package, 5 are agent proposals or human decisions that changed nothing, and 1 merge outside the workflow is listed and excluded. For each, the approval before it and the proposals a human sent back. Each approval is checked against the project members list: starting the agent needs Developer or above, a merge or publish needs Maintainer. Sent back: 0.

When (UTC)WhoRoleWhatApproved by
2026-10-24 09:52Aryanbhargava18Ownermerged MR !3 into v6.xexcluded in supported-lines.yml: rehearsal before the replay; v6.x was reset to 6.2.2 afterwards, so its change is not in the line
2026-10-24 10:59ai-backport-propose-aryan-groupDeveloperproposed a patch for v6.x (no repository change)propose v6.x by @Aryanbhargava18 (Owner)
2026-10-24 11:02ai-backport-approve-aryan-groupDevelopercommitted and opened MR into v6.xapprove v6.x by @Aryanbhargava18 (Owner)
2026-10-24 11:08ai-backport-propose-aryan-groupDeveloperproposed a patch for v7.x (no repository change)propose v7.x by @Aryanbhargava18 (Owner)
2026-10-24 11:12ai-backport-propose-aryan-groupDeveloperproposed a patch for v5.x (no repository change)propose v5.x by @Aryanbhargava18 (Owner)
2026-10-24 11:16ai-backport-approve-aryan-groupDevelopercommitted and opened MR into v5.xapprove v5.x by @Aryanbhargava18 (Owner)
2026-10-24 11:18ai-backport-approve-aryan-groupDevelopercommitted and opened MR into v7.xapprove v7.x by @Aryanbhargava18 (Owner)
2026-10-24 11:24Aryanbhargava18Ownermerged MR !10 into v7.x@Aryanbhargava18 (Owner) merged after approving the proposal
2026-10-24 11:24Aryanbhargava18Ownermerged MR !8 into v6.x@Aryanbhargava18 (Owner) merged after approving the proposal
2026-10-24 11:25Aryanbhargava18Ownermerged MR !9 into v5.x@Aryanbhargava18 (Owner) merged after approving the proposal
2026-10-24 11:26Aryanbhargava18Ownerpublished v7.x (manual job 17437308053)@Aryanbhargava18 (Owner) clicked the manual job
2026-10-24 11:26Aryanbhargava18Ownerpublished v6.x (manual job 17437308523)@Aryanbhargava18 (Owner) clicked the manual job
2026-10-24 11:26Aryanbhargava18Ownerpublished v5.x (manual job 17437308982)@Aryanbhargava18 (Owner) clicked the manual job
2026-10-27 07:20ai-backport-propose-aryan-groupDeveloperproposed a patch for v4.x (no repository change)propose v4.x by @Aryanbhargava18 (Owner)
2026-10-27 07:25ai-backport-approve-aryan-groupDevelopercommitted and opened MR into v4.xapprove v4.x by @Aryanbhargava18 (Owner)
2026-10-27 07:31Aryanbhargava18Ownermerged MR !11 into v4.x@Aryanbhargava18 (Owner) merged after approving the proposal
2026-10-27 07:32Aryanbhargava18Ownerpublished v4.x (manual job 17494276132)@Aryanbhargava18 (Owner) clicked the manual job
2026-10-27 07:48ai-backport-propose-aryan-groupDeveloperproposed a patch for v3.x (no repository change)propose v3.x by @Aryanbhargava18 (Owner)
2026-10-27 12:16ai-backport-approve-aryan-groupDevelopercommitted and opened MR into v3.xapprove v3.x by @Aryanbhargava18 (Owner)
2026-10-27 12:18Aryanbhargava18Ownermerged MR !12 into v3.x@Aryanbhargava18 (Owner) merged after approving the proposal
2026-10-27 12:20Aryanbhargava18Ownerpublished v3.x (manual job 17502881436)@Aryanbhargava18 (Owner) clicked the manual job

Which versions the fix reaches

Each release is loaded into a server and sent the attack request. A crash means affected; no model involved.

Line or releaseVersion (pre-fix)ResultWhat the server did
v7.x7.5.9crashesTypeError: Cannot read properties of undefined (reading 'toLowerCase')
v6.x6.2.2crashesTypeError: Cannot read properties of undefined (reading 'toLowerCase')
v5.x5.2.3crashesTypeError: Cannot read properties of undefined (reading 'toLowerCase')
v4.x4.1.0crashesTypeError: Cannot read properties of undefined (reading 'toLowerCase')
v3.x3.3.3crashesTypeError: Cannot read properties of undefined (reading 'toLowerCase')
ws@2.1.02.1.0crashesTypeError: Cannot read properties of undefined (reading 'toLowerCase')

Evidence

GitLab keeps agent sessions and the vulnerability report private to members, so they are exported here.

Why an agent is needed

Of 22 real backports in ws history since 2018, plain cherry-pick reproduced the maintainer on 5, applied but differed on 2, and conflicted on 15. Git's automatic resolution (-X theirs) of this CVE still crashes on all three lines.