"Remove Photo Metadata" doesn't cover emoji/sticker pack images, pack avatars or power-level badges, all of which are published to the whole room or space #332

Closed
opened 2026-10-05 23:22:00 -04:00 by jared · 0 comments
Owner

stripImageMetadata (#109, on by default) runs for message attachments (utils/uploadItems.ts:24), the user avatar (settings/account/Profile.tsx:94-103) and room/space avatars (common-settings/general/RoomProfile.tsx:145-156). It isn't applied on the other image upload paths:

  • custom emoji / sticker images: components/image-pack-view/ImagePackContent.tsx (picker at line 63) → ImageTile.tsx:98 createUploadAtom(file);
  • pack avatars: components/image-pack-view/PackMeta.tsx;
  • power-level badge images: features/common-settings/permissions/PowersEditor.tsx.

These are exactly the images most likely to be phone photos (a friend's face as a sticker, a pet as an emoji). They are published in room or space state to every member, and anyone can download the original from the media repo with its GPS location and timestamp intact. The setting's description promises "images you send or set as an avatar", which people will reasonably read as covering these.

Fix: route those three pickers through the same helper. A small useStrippedFilePicker wrapper used by all upload sites would keep it from drifting again. Add a test that uploads gps.jpg as an emoji and checks the uploaded bytes have no APP1/EXIF segment.


Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny 30e2dbcd, cinny-desktop 8f67ec7, element-call 3b0050e8.

`stripImageMetadata` (#109, on by default) runs for message attachments (`utils/uploadItems.ts:24`), the user avatar (`settings/account/Profile.tsx:94-103`) and room/space avatars (`common-settings/general/RoomProfile.tsx:145-156`). It isn't applied on the other image upload paths: - custom **emoji / sticker** images: `components/image-pack-view/ImagePackContent.tsx` (picker at line 63) → `ImageTile.tsx:98` `createUploadAtom(file)`; - **pack avatars**: `components/image-pack-view/PackMeta.tsx`; - **power-level badge images**: `features/common-settings/permissions/PowersEditor.tsx`. These are exactly the images most likely to be phone photos (a friend's face as a sticker, a pet as an emoji). They are published in room or space state to every member, and anyone can download the original from the media repo with its GPS location and timestamp intact. The setting's description promises "images you send or set as an avatar", which people will reasonably read as covering these. **Fix:** route those three pickers through the same helper. A small `useStrippedFilePicker` wrapper used by all upload sites would keep it from drifting again. Add a test that uploads `gps.jpg` as an emoji and checks the uploaded bytes have no APP1/EXIF segment. --- _Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny `30e2dbcd`, cinny-desktop `8f67ec7`, element-call `3b0050e8`._
jared added the priority: lowsecurityarea: media labels 2026-10-05 23:22:00 -04:00
jared closed this issue 2026-10-18 06:31:32 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#332