Commit Graph

13587 Commits

Author SHA1 Message Date
Dokku Bot
a553f04966 Release 0.38.2
# History

## 0.38.2

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.2/bootstrap.sh
sudo DOKKU_TAG=v0.38.2 bash bootstrap.sh
```

### Security

- #8590: @josegonzalez Restrict app names to prevent command injection
- #8591: @josegonzalez Harden archive extraction against symlink traversal
- #8589: @josegonzalez Enforce 0600 permissions on .netrc credentials file
- #8588: @josegonzalez Sanitize openresty include filenames to prevent eval injection

### Bug Fixes

- #8593: @josegonzalez Gate ssl_reject_handshake behind nginx 1.19.4
- #8578: @josegonzalez Reference SOURCECODE_WORK_DIR in builder core-post-extract

### Documentation

- #8592: @josegonzalez Add security section to release changelog
- #8587: @vixalien Correct buildkit builder code block syntax
- #8580: @othercorey Set issue type in bug report template

### Tests

- #8586: @josegonzalez Count assert_output_contains matches as fixed strings
- #8581: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-predeploy
- #8582: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
- #8584: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-postdeploy
- #8583: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-tini
- #8585: @dependabot[bot] chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-no-tini
- #8574: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-noexpose
- #8575: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile-bad
- #8577: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-app-json-formations
- #8576: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile
- #8573: @dependabot[bot] chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile

### Dependencies

- #8579: @josegonzalez Use type prefix for dokku-bot dependency label
v0.38.2
2026-05-10 20:17:51 +00:00
Jose Diaz-Gonzalez
9adf6e5f36 Merge pull request #8593 from dokku/fix-debian-bullseye-ssl-reject-handshake 2026-05-10 16:16:16 -04:00
Jose Diaz-Gonzalez
235078f111 Merge pull request #8590 from dokku/command-injection-via-app-name 2026-05-10 15:29:35 -04:00
Jose Diaz-Gonzalez
392ac73d33 fix: gate ssl_reject_handshake behind nginx 1.19.4
The shipped catch-all default site uses `ssl_reject_handshake`, which is unsupported on nginx older than 1.19.4 and causes nginx to fail to start on Debian Bullseye. The postinst now detects the installed nginx version and installs an HTTP-only variant of the catch-all on older systems.
2026-05-09 16:32:30 -04:00
Jose Diaz-Gonzalez
4f4fed7101 test: update apps:rename assertions for quoted git-hook app name
The security fix that quoted `$APP` inside the pre-receive hook heredoc changed the literal hook contents from `dokku git-hook foo` to `dokku git-hook "foo"`, so the existing substring assertions no longer match.
2026-05-09 16:06:27 -04:00
Jose Diaz-Gonzalez
dbac12e9f1 refactor: route bash app name validation through go
The bash and go validators previously each kept their own copy of the regex, which had to be updated in lockstep. Both bash wrappers now invoke the existing common binary via the same pattern as `verify_app_name`, leaving go as the single source of truth. The legacy `IsValidAppNameOld` rule is also widened to allow underscores again so apps created under the old naming rules can still be looked up through `VerifyAppName`'s either-rule fallback.
2026-05-09 16:00:51 -04:00
Jose Diaz-Gonzalez
93f87a0f07 fix: restrict app names to prevent command injection
The previous app name validation regex permitted shell metacharacters such as `;`, `$`, backticks, `|`, and `&`. These names were embedded unquoted into the generated git pre-receive hook script, allowing an authenticated user to execute arbitrary commands as the dokku user simply by pushing to a remote with a crafted app name. App names are now restricted to lowercase alphanumerics, dots, and hyphens, and the hook script also quotes the app variable as a defense-in-depth measure.
2026-05-09 16:00:51 -04:00
Jose Diaz-Gonzalez
d00aaf3ff3 Merge pull request #8586 from dokku/assert-output-contains
Count assert_output_contains matches as fixed strings
2026-05-09 16:00:27 -04:00
Jose Diaz-Gonzalez
e78d3bcc78 Merge pull request #8591 from dokku/arbitrary-file-write
Harden archive extraction against symlink traversal
2026-05-09 15:58:31 -04:00
Jose Diaz-Gonzalez
33dd8005dd Merge pull request #8589 from dokku/netrc-permissions 2026-05-09 15:36:10 -04:00
Jose Diaz-Gonzalez
90aa64e7e3 Merge pull request #8588 from dokku/sanitize-openresty-filenames 2026-05-09 15:36:01 -04:00
Jose Diaz-Gonzalez
f4213a4bf5 tests: prevent assert_output_contains from aborting on no match
Bats runs tests under `set -eo pipefail`, so when `grep -F -o` finds nothing inside the count pipe it exits 1, the whole pipe fails, errexit fires, and the function aborts before reaching the count comparison. Wrap grep in `{ ... || true; }` so the pipe stays zero when the pattern is absent and the helper falls through to the flunk message.
2026-05-09 13:36:29 -04:00
Jose Diaz-Gonzalez
253d47ecf5 Merge pull request #8592 from dokku/security-section
Add security section to release changelog
2026-05-09 13:27:34 -04:00
Jose Diaz-Gonzalez
0b93488006 feat: add security section to release changelog 2026-05-09 13:19:33 -04:00
Jose Diaz-Gonzalez
9decf16ea1 feat: configure archive limits via git properties
Replaces the `DOKKU_ARCHIVE_MAX_SIZE` and `DOKKU_ARCHIVE_MAX_FILES` environment variables with global git properties (`archive-max-size` and `archive-max-files`), configurable via `dokku git:set --global` and surfaced through `dokku git:report --global`. Defaults remain `1073741824` bytes and `10000` entries.
2026-05-09 13:08:23 -04:00
Jose Diaz-Gonzalez
2df0791fcd fix: prevent tar symlink traversal in archive extraction
Archives passed to git:from-archive and certs:add were extracted without symlink or path validation, allowing a crafted archive to write arbitrary files anywhere writable by the dokku user via symlink traversal. Extraction now pre-scans entries for absolute paths, parent traversal, and unsafe symlinks, applies the GNU tar `--no-unsafe-links` flag when available, and validates symlinks after extraction.
2026-05-09 12:54:42 -04:00
Jose Diaz-Gonzalez
6eb8b8632c fix: enforce 0600 permissions on .netrc credentials file
The previous use of `touch` before `netrc set` allowed the file to inherit the umask and be world-readable, exposing stored git credentials to local users. The set and unset paths now explicitly chmod 0600 and chown to the dokku user, and the plugin install hook repairs permissions on already-affected installations.
2026-05-09 12:22:17 -04:00
Jose Diaz-Gonzalez
a70728f61e fix: sanitize openresty include filenames to prevent eval injection
Add defense-in-depth sanitization for OpenResty include files to prevent
OS command injection via malicious filenames that break shell quoting in eval.

- Add filename validation in core-post-extract using regex [^a-zA-Z0-9_.-]
- Validate both http-includes and location-includes paths
- Abort deploy via dokku_log_fail on unsafe filenames
- Skip non-regular files (symlinks, directories) during extraction
- Add security regression test with unsafe filename containing space
- Keep existing guards in docker-args-process-deploy as belt-and-suspenders
- Update documentation to clarify allowed filename characters

Addresses CVSS 9.9 vulnerability where filenames like poc'$(cmd)'x.conf
could escape shell quoting and execute arbitrary commands during deploy.
2026-05-09 12:20:50 -04:00
Jose Diaz-Gonzalez
25abd38387 tests: use /bin/bash -c to execute commands in init tests 2026-05-09 10:48:29 -04:00
Jose Diaz-Gonzalez
2974830e8f Merge pull request #8587 from vixalien/patch-1
Correct buildkit builder code block syntax
2026-05-09 10:45:42 -04:00
Angelo Verlain
2c3f29daca fox: correct buildkit builder code block syntax 2026-05-09 04:07:01 +02:00
Jose Diaz-Gonzalez
38de83eabf tests: use inverted assert
Also echo the status
2026-05-08 21:39:57 -04:00
Jose Diaz-Gonzalez
01268ebad9 tests: fix count 2026-05-08 21:38:22 -04:00
Jose Diaz-Gonzalez
2cf2846c6b test: count assert_output_contains matches as fixed strings
Replace the bash pattern-substitution loop with grep -F -o piped to wc -l so the helper counts literal substring occurrences instead of treating the expected value as a glob pattern. The old implementation interpreted `[`, `]`, `*`, `?`, and `\` as pattern syntax, which made `assert_output_contains "['task.py', 'test']"` report 17 matches against an output that contained the string exactly once - the inner characters were being matched as a character class. assert_output_not_contains delegates to assert_output_contains and is fixed transitively.
2026-05-08 18:56:33 -04:00
Jose Diaz-Gonzalez
47c8141148 Merge pull request #8578 from dokku/8566-core-post-extract-in-four-builder-plugins-fails-under-bash-5-3
Reference SOURCECODE_WORK_DIR in builder core-post-extract
2026-05-08 17:06:10 -04:00
Jose Diaz-Gonzalez
b8f94dfa7f Merge pull request #8581 from dokku/dependabot/docker/tests/apps/go-fail-predeploy/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-predeploy
2026-05-08 17:00:05 -04:00
Jose Diaz-Gonzalez
4efe0eb9fd Merge pull request #8582 from dokku/dependabot/docker/tests/apps/gogrpc/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
2026-05-08 16:59:53 -04:00
Jose Diaz-Gonzalez
a6cfe3a2d1 Merge pull request #8584 from dokku/dependabot/docker/tests/apps/go-fail-postdeploy/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/go-fail-postdeploy
2026-05-08 16:31:33 -04:00
Jose Diaz-Gonzalez
390fe2b35a Merge pull request #8583 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-tini/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-tini
2026-05-08 16:28:33 -04:00
Jose Diaz-Gonzalez
a5ee710496 Merge pull request #8585 from dokku/dependabot/docker/tests/apps/zombies-dockerfile-no-tini/golang-1.26.3
chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/zombies-dockerfile-no-tini
2026-05-08 16:28:25 -04:00
dependabot[bot]
1706729cfe chore(deps): bump golang in /tests/apps/zombies-dockerfile-no-tini
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:22 +00:00
dependabot[bot]
51dc7799d0 chore(deps): bump golang in /tests/apps/go-fail-postdeploy
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:11 +00:00
dependabot[bot]
07d301775e chore(deps): bump golang in /tests/apps/zombies-dockerfile-tini
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:10 +00:00
dependabot[bot]
0619338607 chore(deps): bump golang from 1.26.2 to 1.26.3 in /tests/apps/gogrpc
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:04 +00:00
dependabot[bot]
902b7f6af4 chore(deps): bump golang in /tests/apps/go-fail-predeploy
Bumps golang from 1.26.2 to 1.26.3.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 13:53:03 +00:00
Jose Diaz-Gonzalez
25f87164ce Merge pull request #8574 from dokku/dependabot/docker/tests/apps/dockerfile-noexpose/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-noexpose
2026-05-08 01:35:18 -04:00
Jose Diaz-Gonzalez
67ce12b973 Merge pull request #8575 from dokku/dependabot/docker/tests/apps/dockerfile-procfile-bad/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile-bad
2026-05-08 01:35:10 -04:00
Jose Diaz-Gonzalez
5d212f3195 test: use BATS_TEST_TMPDIR in core-post-extract regression tests
The previous form set `trap "rm -rf '$TMP_DIR'" RETURN` inside the test, but bats propagates `RETURN` traps to nested function calls, so the trap fired on the first `assert_success` and removed the work directory before the trigger script ran. Switching to bats's per-test `BATS_TEST_TMPDIR` removes the trap entirely and lets bats handle cleanup.
2026-05-08 01:34:05 -04:00
Jose Diaz-Gonzalez
05ffccd7e7 Merge pull request #8577 from dokku/dependabot/docker/tests/apps/dockerfile-app-json-formations/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-app-json-formations
2026-05-07 15:46:32 -04:00
Jose Diaz-Gonzalez
5dfda450d9 Merge pull request #8576 from dokku/dependabot/docker/tests/apps/dockerfile/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile
2026-05-07 15:28:44 -04:00
Jose Diaz-Gonzalez
a7119ba693 Merge pull request #8573 from dokku/dependabot/docker/tests/apps/dockerfile-procfile/node-26-alpine
chore(deps): bump node from 25-alpine to 26-alpine in /tests/apps/dockerfile-procfile
2026-05-07 15:28:24 -04:00
Jose Diaz-Gonzalez
870b93c8e3 Merge pull request #8580 from othercorey/patch-1
Set issue type in bug report template
2026-05-07 15:28:07 -04:00
othercorey
48594ca0a4 Set issue type in bug report template 2026-05-07 14:18:30 -05:00
Jose Diaz-Gonzalez
5e279074fd Merge pull request #8579 from dokku/dokku-bot-dependency-patching
Use type prefix for dokku-bot dependency label
2026-05-07 14:41:44 -04:00
Jose Diaz-Gonzalez
5f0c5a5a4f chore: use type prefix for dokku-bot dependency label 2026-05-07 14:39:06 -04:00
Dokku Bot
983c462904 Release 0.38.1
# History

## 0.38.1

Install/update via the bootstrap script:

```shell
wget -NP . https://dokku.com/install/v0.38.1/bootstrap.sh
sudo DOKKU_TAG=v0.38.1 bash bootstrap.sh
```

### Bug Fixes

- #8563: @josegonzalez Source property-functions where fn-plugin-property-* helpers are used
- #8559: @josegonzalez Install cnb pack from github releases instead of ppa
- #8558: @josegonzalez Chown migrated legacy storage entries to dokku
- #8545: @josegonzalez Deflake haproxy bats tests

### Refactors

- #8546: @josegonzalez Consolidate nginx.conf.sigil server blocks

### Documentation

- #8548: @josegonzalez Use explicit type property in proxy:set examples
- #8547: @josegonzalez Document plugin properties migrated from env vars
- #8544: @josegonzalez Fix reference to when the build plugin was introduced

### Tests

- #8565: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.0 in /tests/apps/gogrpc
- #8568: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/multi
- #8572: @dependabot[bot] chore(deps): bump django from 5.2.13 to 5.2.14 in /tests/apps/dockerfile-release
- #8570: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/dockerfile-release
- #8567: @dependabot[bot] chore(deps): bump gunicorn from 25.3.0 to 26.0.0 in /tests/apps/python-flask

### Dependencies

- #8571: @dependabot[bot] chore(deps): bump traefik from v3.6.15 to v3.7.0 in /plugins/traefik-vhosts
- #8569: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.44 to 2.11.45 in /plugins/scheduler-k3s
- #8561: @dokku-bot chore: bump pack to 0.40.4
- #8555: @dependabot[bot] chore(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.22 in /plugins/app-json
- #8556: @dependabot[bot] chore(deps): bump github.com/Masterminds/semver/v3 from 3.4.0 to 3.5.0 in /plugins/scheduler-k3s
- #8550: @dokku-bot chore: bump docker-container-healthchecker to 0.15.2
- #8553: @dokku-bot chore: bump dokku-event-listener to 0.19.1
- #8552: @dokku-bot chore: bump lambda-builder to 0.9.3
- #8551: @dokku-bot chore: bump procfile-util to 0.20.7
- #8554: @dependabot[bot] chore(deps): bump peter-evans/create-pull-request from 7 to 8
v0.38.1
2026-05-07 17:29:53 +00:00
Jose Diaz-Gonzalez
bc8adfa6e2 test: add run_plugn_trigger and run_plugin_script bats helpers
Both helpers wrap `run /bin/bash -c "..."` with the env vars dokku plugin scripts and `plugn` need, replacing the long inline boilerplate that was duplicated across `tests/unit/resource_3.bats` and the new `core-post-extract` regression tests in the builder bats files.
2026-05-07 12:47:00 -04:00
Jose Diaz-Gonzalez
eb17a383c6 fix: reference SOURCECODE_WORK_DIR in builder core-post-extract
The builder-dockerfile, builder-lambda, builder-nixpacks, builder-pack and builder-railpack `core-post-extract` triggers assigned `$2` to a local `SOURCECODE_WORK_DIR` but called `pushd "$TMP_WORK_DIR"`, which was unset. Bash 5.2 silently accepted `pushd ""`, so the bug stayed dormant. Bash 5.3 (shipped with Ubuntu 26.04) makes it a hard error and `set -e` aborts the trigger, causing every `git push` to fail with `pushd: null directory`.
2026-05-07 12:39:46 -04:00
Jose Diaz-Gonzalez
368a6999c9 Merge pull request #8565 from dokku/dependabot/go_modules/tests/apps/gogrpc/google.golang.org/grpc-1.81.0
chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.0 in /tests/apps/gogrpc
2026-05-07 10:37:25 -04:00
dependabot[bot]
1e7df47feb chore(deps): bump node in /tests/apps/dockerfile-app-json-formations
Bumps node from 25-alpine to 26-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:55:48 +00:00