PST-078: The editable-cell POST accepts the whole company form's fields beside the one cell #807
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#807
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found in the security audit of 2026-10-10 (
SECURITY-AUDIT-2026-10-10.md), run againstmainatc30851bfrom 8 to 10 October 2026, as PST-078. Severity: Informational.The text below is the audit's entry, unchanged apart from links to the other issues it names. The finding was produced by automated review and checked by a second automated pass; re-check it before acting on it.
src/postulo/core/cells.py(140-153)Who can do it, and what they need. The owner of the row only; no cross-account effect. Verified with test_more.py::test_cell_editor_accepts_declared_fields.
How it works.
alone=True, which drops them, is not passed.Impact. No security boundary is crossed: everything written belongs to the requester and every queryset is still for_user. It bypasses the cell view's
column_forgate ('this column is editable is decided in one place and cannot be worked around by typing an address') and lets a one-field endpoint write several fields, which is the kind of second save path CLAUDE.md warns about.Verification (verdict: confirmed; severity after verification: Informational). Three corrections to the stated effect. (1) The logo fields are parsed but never acted on:
apply_logo()is called by the page views, not byEditableCellView.post(cells.py:217-221 calls onlyform.save()), so alogo_urlin the cell POST fetches nothing and changes nothing. (2)industriesis accepted by the narrowed form but_save_m2mskips it (outside Meta.fields=['name']); onlynew_industriesreaches the row. (3)known_servicewith a blank name renames the company to the registry name ('Workforce Australia') but leaveskindandwebsiteuntouched because they are outside the narrowed fields, i.e. a half-applied record in the person's own data. …Suggested remediation. Have EditableCellView.form_for pass alone=True (or have the cell form strip declared fields other than the column's), and add a test that a cell POST carrying new_industries / location_correction changes only the named field.
Fixed in
cd09e7839on main.