Where
-Infinity
0

Allocation of Resources Without Limits or Throttling vulnerability in ash-project ashtypescript allows an unauthenticated attacker to exhaust the BEAM atom table and abort the node via client-supplied RPC field names.

AshTypescript.FieldFormatter.converttofieldatom/2 in lib/ashtypescript/fieldformatter.ex converts a client-supplied field name to an atom with String.toatom/1 when no matching atom already exists. It delegates first to parseinputfield/2, which resolves the name with String.toexistingatom/1 and falls back to returning the plain string; converttofieldatom/2 then mints an atom from that string rather than treating the name as unknown.

RPC field selection reaches it for every requested field name through AshTypescript.Rpc.FieldProcessing.FieldSelector, which resolves each name before checking that the field exists, with no allowlist, length bound, or rate limit. Atoms are never garbage collected, so each distinct name mints a permanent one and the VM aborts once the atom table limit is reached. A field name over 255 characters additionally raises an uncaught SystemLimitError.

This issue affects ashtypescript: from 0.1.0 before 0.18.0.

First published (updated )

Generation of Error Message Containing Sensitive Information vulnerability in ash-project ashtypescript allows an unauthenticated attacker to read internal application data from an HTTP 500 response body.

When a typed-controller route handler returns anything other than a %Plug.Conn{}, dispatch/3 in lib/ashtypescript/typedcontroller/requesthandler.ex passes the value to unexpectedreturn/2, which interpolates inspect(value, limit: 50) directly into the response message. The limit option bounds elements per collection rather than the term as a whole, so a handler falling through with a term such as {:error, %User{}} or a changeset serialises its full field set, including hashed passwords, tokens, and tenant identifiers, into the JSON error returned to the caller.

This contradicts the module's own posture elsewhere: the rescue clause gates Exception.message/1 behind AshTypescript.typedcontrollershowraisederrors?/0 and otherwise returns a generic message, while this path is ungated and always echoes.

This issue affects ashtypescript: from 0.15.0 before 0.18.0.

First published (updated )
Input Validation

Improper Input Validation vulnerability in ash-project ashtypescript allows a remote attacker to submit argument values outside a declared allowlist or bound on typed-controller routes.

AshTypescript.TypedController.RequestHandler in lib/ashtypescript/typedcontroller/requesthandler.ex calls Ash.Type.castinput/3 and treats an {:ok, cast} result as fully validated. In Ash these are separate steps: castinput/3 only coerces the term, while every constraint declared on the argument is applied by Ash.Type.applyconstraints/3, which this path never calls. Constraints such as oneof, maxlength, min and max, and match are therefore inert, so a value outside a declared allowlist is accepted and passed to the route handler. Codegen renders the same constraints into the generated TypeScript types, so an allowlist appears enforced to a TypeScript caller while any other HTTP client ignores it. Empty-string to nil normalization also lives in applyconstraints, so the allownil?: false check accepts "" for a required argument.

Where a constraint gates a role, a status, or a sort direction, this becomes a privilege or state-machine bypass.

This issue affects ashtypescript: from 0.15.0 before 0.18.0.

First published (updated )

Incorrect Authorization vulnerability in ash-project ashtypescript allows an unauthorized RPC caller to read attribute values that Ash field policies denied.

When a field policy denies an attribute, Ash substitutes %Ash.ForbiddenField{}, which retains the real value in originalvalue because embedded resources must remain writable, and hides it from Inspect rather than removing it. AshTypescript.Rpc.ResultProcessor strips these markers to nil on its template-driven paths, but normalizeprimitive/1 in lib/ashtypescript/rpc/resultprocessor.ex had no such clause, so a marker fell through to the generic struct branch which calls Map.fromstruct/1 and serializes every key, originalvalue included. The denied value is returned to the caller inside the marker that represents its own denial.

The simplest trigger is an action returning an embedded resource as a map, which routes through normalizeresourcestruct/2 with an empty template. normalizevalueforjson/1 is a public, unguarded entry point to the same path.

This issue affects ashtypescript: from 0.11.0 before 0.18.0.

First published (updated )

Generation of Error Message Containing Sensitive Information vulnerability in ash-project ashtypescript allows an unauthenticated attacker to receive unredacted internal error data by provoking an error shape the configured error handler does not match.

applyerrorhandler/3 in lib/ashtypescript/rpc/errors.ex is the only hook an application has for redacting or suppressing errors before they reach the client, with a nil return dropping the error entirely. Its rescue clause logs a warning and then returns the original, pre-handler error map. Error handlers are conventionally written as pattern-matching functions over expected error shapes, so an unmatched shape raises FunctionClauseError and the raw transformed error, including any secrets carried in vars, is emitted instead. An intent to suppress an error becomes an intent to publish it. The rescue catches exceptions only, so a handler that throws or exits still propagates.

This issue affects ashtypescript: from 0.8.0 before 0.18.0.

First published (updated )

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203