Skip to main content

Changelog

Updates, changes, and improvements at Retool.

Removal of image download functionality for external app users

Due to potential security concerns, Retool is removing certain functionality that enables external app users to download images. No security breach or active vulnerability has occurred, and you do not need to take any security-specific actions.

External and embedded, publicly available apps will no longer support:

  • Download Image columns in the Legacy Table component. Use an alternative method, such as a Link or Button column type, for image URL links. Retool strongly recommends you migrate to the current Table component instead.
  • Export PDFs with images hosted on separate domains. All other components will be included in the PDF export. Retool recommends moving your publicly-hosted images to be hosted on the same domain as your Retool instance. For example, you could use images that are natively uploaded to the Image component, stored in Retool Storage, stored in Retool Database, Base64-encoded, or stored in an Amazon S3 bucket.

These features are no longer available on Retool Cloud and Self-hosted Retool 3.114-edge or later. These features will be removed in the next stable release of Self-hosted Retool.

Administrators of self-hosted organizations can check which apps might be affected by running the following query on the deployment's storage database:

SELECT
p.uuid, p.name, ps."updatedAt"
FROM embeds e
INNER JOIN pages p ON p.id = e."pageId"
INNER JOIN (
SELECT DISTINCT ON (ps."pageId") ps."pageId", ps."updatedAt", ps.data
FROM page_saves ps
ORDER BY ps."pageId", ps."createdAt" DESC
) ps ON ps."pageId" = p.id
WHERE p."deletedAt" IS NULL
AND (
data::text like '%ImageDataCell%'
OR data::text like '%utils.downloadPage%'
OR data::text like '%utils.serializePage%'
);