Impact
When using the default configuration of Tandoor Recipes, specifically using SQLite and default MEDIA_ROOT, the full database file may be externally accessible, potentially on the Internet.
The root cause is that the NixOS module configures the working directory of Tandoor Recipes, as well as the value of MEDIA_ROOT, to be /var/lib/tandoor-recipes. This causes Tandoor Recipes to create its db.sqlite3 database file in the same directory as MEDIA_ROOT causing it to be accessible without authentication through HTTP like any other media file.
This is the case when using GUNICORN_MEDIA=1 or when using a web server like nginx to serve media files.
This bug has been present since the module was introduced in 23.05.
Patches
NixOS 26.05 (unstable at the time of writing) changes the default value of MEDIA_ROOT to a sub folder of the data directory. This only applies to configurations with system.stateVersion >= 26.05. For older configurations, one of the workarounds below should be applied instead.
NixOS 25.11 has received a backport of this patch, though it doesn't fix this vulnerability without user intervention.
Workarounds / Remediations
Recommended: Move MEDIA_ROOT into a subdirectory
The issue is only present when MEDIA_ROOT is the same as the data directory. Moving it into a subdirectory of /var/lib/tandoor-recipes remediates this and any similar issues in the future.
- Stop the currently running service:
systemctl stop tandoor-recipes.service
- Create a media folder. NixOS
26.05 creates the media path at /var/lib/tandoor-recipes/media by default, but you may choose any other path as well. mkdir -p /var/lib/tandoor-recipes/media
- Move existing media to the new path:
mv /var/lib/tandoor-recipes/{files,recipes} /var/lib/tandoor-recipes/media
- Set
services.tandoor-recipes.extraConfig.MEDIA_ROOT = "/var/lib/tandoor-recipes/media"; in your NixOS configuration (not needed if system.stateVersion >= 26.05).
- If not using
GUNICORN_MEDIA, update your reverse proxy / web server configuration accordingly.
- Rebuild and switch!
These changes can be reverted by moving the files back into the state directory.
Not recommended: Switch to PostgreSQL
When using an external database like PostgreSQL (the only other option available in Tandoor Recipes) this issue does not manifest.
A simple PostgreSQL configuration can be enabled using the option
services.tandoor-recipes.database.createLocally.
Note that this will require migrating the existing database to PostgreSQL. Refer to the upstream documentation for this procedure. It is important to delete or move the db.sqlite3 file out of the media path, after this has been done.
More information on configuring PostgreSQL can be found in the upstream documentation.
Set the following option to ignore the evaluation warnings once db.sqlite3 has been deleted.
{
services.tandoor-recipes.extraConfig.MEDIA_ROOT = "/var/lib/tandoor-recipes";
}
As future releases of Tandoor Recipes could add additional files to the data
directory, this is not a future-proof solution.
Not recommended: Disallow access to db.sqlite3
When using a web server like nginx, access to this file can be disabled.
As future releases of Tandoor Recipes could add additional files to the data
directory, this is not a future-proof solution.
References
Initial issue: #338339
Fix for NixOS unstable / 26.05: #427845
Backport for NixOS 25.11: #481140
Documentation: https://nixos.org/manual/nixos/unstable/#module-services-tandoor-recipes-migrating-media
Impact
When using the default configuration of Tandoor Recipes, specifically using SQLite and default
MEDIA_ROOT, the full database file may be externally accessible, potentially on the Internet.The root cause is that the NixOS module configures the working directory of Tandoor Recipes, as well as the value of
MEDIA_ROOT, to be/var/lib/tandoor-recipes. This causes Tandoor Recipes to create itsdb.sqlite3database file in the same directory asMEDIA_ROOTcausing it to be accessible without authentication through HTTP like any other media file.This is the case when using
GUNICORN_MEDIA=1or when using a web server like nginx to serve media files.This bug has been present since the module was introduced in 23.05.
Patches
NixOS 26.05 (unstable at the time of writing) changes the default value of
MEDIA_ROOTto a sub folder of the data directory. This only applies to configurations withsystem.stateVersion>= 26.05. For older configurations, one of the workarounds below should be applied instead.NixOS 25.11 has received a backport of this patch, though it doesn't fix this vulnerability without user intervention.
Workarounds / Remediations
Recommended: Move
MEDIA_ROOTinto a subdirectoryThe issue is only present when
MEDIA_ROOTis the same as the data directory. Moving it into a subdirectory of/var/lib/tandoor-recipesremediates this and any similar issues in the future.systemctl stop tandoor-recipes.service26.05creates the media path at/var/lib/tandoor-recipes/mediaby default, but you may choose any other path as well.mkdir -p /var/lib/tandoor-recipes/mediamv /var/lib/tandoor-recipes/{files,recipes} /var/lib/tandoor-recipes/mediaservices.tandoor-recipes.extraConfig.MEDIA_ROOT = "/var/lib/tandoor-recipes/media";in your NixOS configuration (not needed ifsystem.stateVersion >= 26.05).GUNICORN_MEDIA, update your reverse proxy / web server configuration accordingly.These changes can be reverted by moving the files back into the state directory.
Not recommended: Switch to PostgreSQL
When using an external database like PostgreSQL (the only other option available in Tandoor Recipes) this issue does not manifest.
A simple PostgreSQL configuration can be enabled using the option
services.tandoor-recipes.database.createLocally.Note that this will require migrating the existing database to PostgreSQL. Refer to the upstream documentation for this procedure. It is important to delete or move the
db.sqlite3file out of the media path, after this has been done.More information on configuring PostgreSQL can be found in the upstream documentation.
Set the following option to ignore the evaluation warnings once
db.sqlite3has been deleted.As future releases of Tandoor Recipes could add additional files to the data
directory, this is not a future-proof solution.
Not recommended: Disallow access to
db.sqlite3When using a web server like nginx, access to this file can be disabled.
As future releases of Tandoor Recipes could add additional files to the data
directory, this is not a future-proof solution.
References
Initial issue: #338339
Fix for NixOS unstable / 26.05: #427845
Backport for NixOS 25.11: #481140
Documentation: https://nixos.org/manual/nixos/unstable/#module-services-tandoor-recipes-migrating-media