---
id: GHSA-j5qp-p44g-2m49
title: '@asymmetric-effort/specifyjs: No redirect target validation in secureFetch'
summary: '@asymmetric-effort/specifyjs: No redirect target validation in secureFetch'
severity: medium
cwe:
  - CWE-918
vendor: asymmetric-effort
product: '@asymmetric-effort/specifyjs'
ecosystem: npm
affected:
  - '@asymmetric-effort/specifyjs < 0.2.136'
patched:
  - '@asymmetric-effort/specifyjs 0.2.136'
published: '2026-07-02'
updated: '2026-07-02'
source: GHSA
sourceUrl: 'https://github.com/advisories/GHSA-j5qp-p44g-2m49'
references:
  - url: >-
      https://github.com/asymmetric-effort/specifyjs/security/advisories/GHSA-j5qp-p44g-2m49
  - url: >-
      https://github.com/asymmetric-effort/specifyjs/commit/25d1fb491d99479efdf501f5f75e0bb80c908f0a
  - url: 'https://github.com/advisories/GHSA-j5qp-p44g-2m49'
tags:
  - ghsa
  - npm
ingestedAt: '2026-07-02T19:41:50.954Z'
---

## Overview

## Finding

**Location**: `core/src/shared/secure-fetch.ts`

`assertSecureUrl` validated only the initial request URL. The `fetch()` API follows redirects by default (up to 20 hops). A request to a valid `https://` URL could redirect to `http://internal-service/` or other unvalidated destinations.

## Status

**Fixed in v0.2.136** — `secureFetch` now defaults to `redirect: 'error'` which rejects any redirect. Callers can override with `{ redirect: 'follow' }` if they trust the target.

## Affected packages

- `@asymmetric-effort/specifyjs < 0.2.136`

## Remediation

Upgrade to a patched release:

- `@asymmetric-effort/specifyjs 0.2.136`
