Skip to content

RDODCP-914: Chisel Upstream Sync (v1.12.1) + Security Fixes - #618

Open
anurag-outsystems wants to merge 56 commits into
jpillora:masterfrom
OutSystems:RDODCP-914-Chisel-2
Open

RDODCP-914: Chisel Upstream Sync (v1.12.1) + Security Fixes#618
anurag-outsystems wants to merge 56 commits into
jpillora:masterfrom
OutSystems:RDODCP-914-Chisel-2

Conversation

@anurag-outsystems

Copy link
Copy Markdown

RDODCP-914: Chisel Upstream Sync (v1.12.1) and Dependency Updates

Summary

Syncs OutSystems Chisel fork with upstream v1.12.1, bringing reliability improvements, security fixes, and dependency updates.

Key Changes

Security & Reliability:

  • ✅ SSH dependency update (golang.org/x/crypto v0.56.0) - fixes 3 HIGH severity CVEs:
    • GO-2026-6303 (fixed in v0.55.0)
    • GO-2026-6354 (fixed in v0.56.0) ⚠️ Blocks Azure pipeline
    • GO-2026-6355 (fixed in v0.56.0) ⚠️ Blocks Azure pipeline
  • ✅ UDP reverse tunnel security hardening - restricts return peers, adds peer validation and expiry
  • ✅ Enhanced keepalive testing and WebSocket limit enforcement
  • ✅ Half-close connection handling improvements

Features:

  • ✅ CLI flags migrated to opts library for better flag parsing
  • ✅ User ACL hot-reload via fsnotify
  • ✅ SOCKS5 ACL support with regex-based address filtering

Dependencies:

  • golang.org/x/crypto: v0.54.0 → v0.56.0 (fixes HIGH CVEs)
  • github.com/jpillora/opts: v1.8.0 → v1.8.1

Files Changed

  • 65 files changed: +4,488 insertions, -682 deletions
  • Core changes: main.go, client/, server/, share/tunnel/
  • New test coverage: test/e2e/ (ACL reload, UDP caps, keepalive, half-close)

Upstream Sync Status

Synced commits: 7/7 relevant upstream commits from v1.11.7 → v1.12.1
Excluded: 3 upstream commits (CI/release pipeline changes specific to jpillora/chisel)

Fork-Specific Exclusions:

  • .github/workflows/ci.yml - Empty (Azure DevOps CI)
  • .github/workflows/promote.yml - Empty (Azure DevOps release pipeline)
  • Both use merge=ours strategy to preserve OutSystems infrastructure

Testing

  • Unit tests: Passing (pre-existing flaky tests noted)
  • E2E tests: New coverage for UDP security, ACL reload, keepalive
  • Local verification: Reverse tunnel functionality confirmed
  • Build: Tested with Go 1.26.6

Commits

Release Notes

Target version: v1.11.8-os.3.0

bmartins-unit and others added 30 commits October 10, 2022 09:01
* Set ServerName (SNI) to *hostname. Useful for spoofing our way through restrictive gateways.

* Bump actions/checkout from 2 to 3.1.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v2...v3.1.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Added --sni switch to control the ServerName when connecting with TLS. Makes 'domain fronting' possible.

* feat: dependabot workflow automation for updating dependency 

Signed-off-by: Pratik Raj <rajpratik71@gmail.com>

* Bump github.com/fsnotify/fsnotify from 1.4.9 to 1.6.0 (jpillora#389)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* UDP buffer size override with CHISEL_UDP_MAX_SIZE environment variable (jpillora#367)

* Add locking around the connection count to fix a data race. (jpillora#342)

Co-authored-by: andres-portainer <andres-portainer@users.noreply.github.com>

* fix: small typo error in main.go (jpillora#334)

* Respond to /health and /version by request path rather than by the whole url string (jpillora#328)

Co-authored-by: bar <foo@example.org>

* Update version.go (jpillora#288)

* Providing chisel's client with a logger level (jpillora#281)

Co-authored-by: Barak Sharoni <barak.sharoni@velocity.tech>
Co-authored-by: barak-sharoni-velocity <81081183+barak-sharoni-velocity@users.noreply.github.com>

* add EnvBool

* Fix jpillora#390: Use code to generate certificates for client & server (jpillora#400)

* docker alpine->google-distroless

* docker to use scratch

* Fix missing NetDialContext: c.config.DialContext (jpillora#398)

* actions: setup go v3

* switch to scratch image

* update dependabot

* move chisel to flyio

* update from upstream

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Pratik Raj <rajpratik71@gmail.com>
Co-authored-by: ip-rw <s@ip.rw>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pratik Raj <Rajpratik71@gmail.com>
Co-authored-by: Jaime Pillora <jpillora@gmail.com>
Co-authored-by: fsiegmund <siegmund@slb.com>
Co-authored-by: andres-portainer <91705312+andres-portainer@users.noreply.github.com>
Co-authored-by: andres-portainer <andres-portainer@users.noreply.github.com>
Co-authored-by: 0xflotus <0xflotus@gmail.com>
Co-authored-by: BigSully <BigSully@users.noreply.github.com>
Co-authored-by: bar <foo@example.org>
Co-authored-by: invist <35263248+c-f@users.noreply.github.com>
Co-authored-by: zuzgon <zuzgon@gmail.com>
Co-authored-by: Barak Sharoni <barak.sharoni@velocity.tech>
Co-authored-by: barak-sharoni-velocity <81081183+barak-sharoni-velocity@users.noreply.github.com>
Co-authored-by: Jaime Pillora <dev@jpillora.com>
Co-authored-by: Guillaume SMAHA <GuillaumeSmaha@users.noreply.github.com>
* bump versions

* bump versions

* trigger actions
* bumped version

* bumped version
* Set ServerName (SNI) to *hostname. Useful for spoofing our way through restrictive gateways.

* Bump actions/checkout from 2 to 3.1.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v2...v3.1.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Added --sni switch to control the ServerName when connecting with TLS. Makes 'domain fronting' possible.

* feat: dependabot workflow automation for updating dependency 

Signed-off-by: Pratik Raj <rajpratik71@gmail.com>

* Bump github.com/fsnotify/fsnotify from 1.4.9 to 1.6.0 (jpillora#389)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* UDP buffer size override with CHISEL_UDP_MAX_SIZE environment variable (jpillora#367)

* Add locking around the connection count to fix a data race. (jpillora#342)

Co-authored-by: andres-portainer <andres-portainer@users.noreply.github.com>

* fix: small typo error in main.go (jpillora#334)

* Respond to /health and /version by request path rather than by the whole url string (jpillora#328)

Co-authored-by: bar <foo@example.org>

* Update version.go (jpillora#288)

* Providing chisel's client with a logger level (jpillora#281)

Co-authored-by: Barak Sharoni <barak.sharoni@velocity.tech>
Co-authored-by: barak-sharoni-velocity <81081183+barak-sharoni-velocity@users.noreply.github.com>

* add EnvBool

* Fix jpillora#390: Use code to generate certificates for client & server (jpillora#400)

* docker alpine->google-distroless

* docker to use scratch

* Fix missing NetDialContext: c.config.DialContext (jpillora#398)

* actions: setup go v3

* switch to scratch image

* update dependabot

* move chisel to flyio

* Bump to Go 1.21 (jpillora#440)

Co-authored-by: cmeng <cmenginnz@gmail.com>

* add arm v5 builds (jpillora#395)

* Sync with upstream

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Pratik Raj <rajpratik71@gmail.com>
Co-authored-by: ip-rw <s@ip.rw>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pratik Raj <Rajpratik71@gmail.com>
Co-authored-by: Jaime Pillora <jpillora@gmail.com>
Co-authored-by: fsiegmund <siegmund@slb.com>
Co-authored-by: andres-portainer <91705312+andres-portainer@users.noreply.github.com>
Co-authored-by: andres-portainer <andres-portainer@users.noreply.github.com>
Co-authored-by: 0xflotus <0xflotus@gmail.com>
Co-authored-by: BigSully <BigSully@users.noreply.github.com>
Co-authored-by: bar <foo@example.org>
Co-authored-by: invist <35263248+c-f@users.noreply.github.com>
Co-authored-by: zuzgon <zuzgon@gmail.com>
Co-authored-by: Barak Sharoni <barak.sharoni@velocity.tech>
Co-authored-by: barak-sharoni-velocity <81081183+barak-sharoni-velocity@users.noreply.github.com>
Co-authored-by: Jaime Pillora <dev@jpillora.com>
Co-authored-by: Guillaume SMAHA <GuillaumeSmaha@users.noreply.github.com>
Co-authored-by: cmeng <cmenginnz@gmail.com>
Co-authored-by: maurerr <maurerr@users.noreply.github.com>
* feat(RDGRS-662): build image

* feat(RDGRS-662): restore test CI and dependabot

* feat(RDGRS-662): test CI only on linux

* feat(RDGRS-662): add version to goreleaser
* fix(RDGRS-662): server side keep alive
From chisel#442 . Not tested

* feat(RDGRS-662): build image (#20) (#21)

* feat(RDGRS-662): build image

* feat(RDGRS-662): restore test CI and dependabot

* feat(RDGRS-662): test CI only on linux

* feat(RDGRS-662): add version to goreleaser

* Revert "feat(RDGRS-662): build image (#20) (#21)"

This reverts commit a0feabe.

* feat(RDGRS-662): add explicit timer stop
* chore(RDGRS-662): remove reference updates and add replace

* adding replace
Version update of upstream
* go/libs versions updated
* Added .gitattributes to ensure .github/workflows/ci.yml doesn't get merged from upstream.
Go version updated from 1.23.8 to 1.24.6 to address security vulnerabilities.
Consolidated Dependabot updates
Updated CODEOWNERS file to reflect the PaaS team as owners.
samartha-pm and others added 26 commits January 27, 2026 15:16
* Bump Go version

* Fix: Force GOTOOLCHAIN=local to use installed Go 1.25.6

* reset to default config

* chore: align go version with master (1.25.5)

* updated goreleaser to use dockerfile
* updated goreleaser to use dockerfile

* updated base image

* updated goreleaser
* Bump Go version

* Fix: Force GOTOOLCHAIN=local to use installed Go 1.25.6

* reset to default config

* chore: align go version with master (1.25.5)

* updated goreleaser to use dockerfile

* updated base image

* updated goreleaser

* updated Dockerfile

* updated Dockerfile
* Security Patch

* Removed GRS from Codeowners
…d) (#48)

Initialize comprehensive project documentation for the chisel fork:
- ARCHITECTURE.md with system diagrams and design decisions
- CONTRIBUTING.md with build, test, and PR guidelines
- CLAUDE.md with AI agent guidance and quick-reference
Cherry-picked from upstream commit 44310b6.

Previously, authfile ACL restrictions were only checked during the
initial config handshake. This adds ACL enforcement at the tunnel
layer when processing SSH channel requests, ensuring that each
outbound connection is validated against the user's allowed addresses.

This is a security enhancement that closes a gap where ACL restrictions
could potentially be bypassed after initial authentication.

Note: Dependency update commits (57d2249, 4df5fcf) were not included
as the fork already has newer dependency versions than upstream v1.11.5.

Co-authored-by: Jaime Pillora <dev@jpillora.com>
* security patch

* dependency updates
…#56)

* RDODCP-917: Update golang.org/x dependencies to match cloud-connector

* RDODCP-917: Bump Go to 1.26.4 (mitigate CVE-2026-42504)
* Fix race in tunnel waitGroup causing negative counter panic (jpillora#586)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Improve SOCKS auth: enforce per-user ACL on socks channels (jpillora#591)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* clean workspace dependencies for release

* Add .trivyignore to suppress CVE-2026-48113 false positive

Trivy flags CVE-2026-48113 on our build because the OutSystems fork tag
`1.11.5-os.N` is a SemVer pre-release of `1.11.5`, sorting below the
fixed version. The fix is already present via PR #51. Ref: RDODCP-917

* Remove .trivyignore

* Wire Verbose flag to client logger level (upstream jpillora#281)

The Verbose field was present in Config but never used. Apply the
missing half of upstream commit 200a8e2: set Logger.Info = c.Verbose
so callers can control log verbosity programmatically.

---------

Co-authored-by: Jaime Pillora <jpillora@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reliability, security, and observability across client/server/tunnel:
keepalive ping timeouts, TCP half-close propagation, dial-before-accept,
graceful SIGTERM shutdown, UDP flow-cap sweep, pre-auth WS size cap,
SOCKS ACL enforcement + live authfile reload, exact legacy-fingerprint
match, --auth validation, session/failed-login logs, jpillora#608 panic fix,
goreleaser multi-arch Docker images, and a two-stage release pipeline
(draft + versioned images at tag time; latest promoted on publish).

Full detail: 1.12-changes.md, the PR (34 commits), and
https://jpillora.com/chisel-112-ux-review

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- remove the local opts module replacement\n- upgrade opts to v1.8.1 for margin-aware help wrapping\n\nCo-Authored-By: Codex GPT-5 <noreply@openai.com>
- build releases with Go 1.27.0
- update x/crypto to v0.55.0 for GO-2026-6303

Co-Authored-By: Codex GPT-5.2 <noreply@openai.com>
- record only listener peers observed from inbound UDP
- expire and cap peer state, rejecting untrusted destinations
- cover reverse UDP flow and destination validation

Co-Authored-By: Codex GPT-5 <noreply@openai.com>
OutSystems uses Azure DevOps for releases with security scanning.
The upstream promote.yml workflow references jpillora registries
and conflicts with our release pipeline.

Applied merge=ours strategy (same as ci.yml) to preserve our
empty file during future upstream syncs.
…HIGH severity vulnerabilities blocking Azure pipeline: - GO-2026-6354: SSH security issue - GO-2026-6355: SSH security issue The v0.55.0 update only fixed GO-2026-6303. This completes the security patch by upgrading to v0.56.0 which addresses all remaining HIGH CVEs in golang.org/x/crypto. No breaking changes - tested with existing test suite.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.