Commit Graph
90 Commits
Author SHA1 Message Date
Max LvandClaude 553cdc7945 Add opt-in printable TCP salt experiment for ss-local (#3063)
Add `ss-local --printable-salt` / `"printable_salt": true`, disabled by
default. For each outgoing TCP salt it picks a prefix length uniformly
from 6-12 bytes and samples those bytes as printable ASCII (0x20-0x7e)
immediately before key derivation. The salt stays 32 bytes with no
framing or markers, so the wire format is unchanged and any stock
server interoperates. Only chacha20-ietf-poly1305 and aes-256-gcm are
accepted; other ciphers fail at startup. UDP, server responses, and
AEAD-2022 are untouched.

Crypto unit tests cover length distribution, empty first writes, exact
framing overhead, salt-tail preservation, byte-at-a-time decryption,
tampering and replay rejection. CLI tests check local-only exposure and
cipher rejection via flag, config key and bad config type. interop.py
gains --printable-salt and --server-bin for independent stock servers.

docs/printable-salt.md records the design, entropy bound, fingerprint
caveats and route-experiment procedure; docs/encoding-experiments.md
and tests/experiments/ hold the Base85/lowpop85/TLS outer-transport
prototypes. docs/measurements/printable-salt-2026-09-23/ archives the
sanitized results of the aborted field trials.

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 09:09:51 +08:00
Max Lv 454bdc0a67 Accept combined server endpoints with strict IPv6 parsing 2026-09-13 07:15:28 +08:00
Max Lv 201e70c4bd Modernize C builds with offline dependencies and portable runtime helpers (#3050)
Bundle pinned offline dependencies, remove libcork/libipset and submodule requirements, and add portable runtime helpers with relocatable static/shared library installations.

Add Clang static build validation for Linux/musl, macOS and Windows, real TCP/UDP and SIP003 interoperability coverage, and recorded performance tradeoffs. All 21 hosted checks pass at the reviewed PR head 8d504e6218.
2026-09-11 13:42:11 +08:00
Max LvandClaude Fable 5 dd2704c857 Fix bugs found by clang-tidy triage; ratchet warning budget to zero (#3047)
Real bugs fixed:
- manager.c: kill_server/stop_server checked fscanf() != EOF, so malformed
  pid file content left pid uninitialized and passed it to kill(). Parse
  with fgets + ss_parse_int and require pid > 0.
- utils.c: get_default_conf() crashed on strlen(NULL) when HOME is unset
  (e.g. daemons started by init) and left a dangling static pointer after
  free(), a latent use-after-free on repeated calls. Use a static buffer
  and fall back to the system config when HOME is missing.
- local.c: in UDP_ONLY mode, start_ss_local_server() passed uninitialized
  listen_ctx.fd to the library callback. Initialize it to -1.

Improvements:
- Replace rand()/srand(time(NULL)) upstream-server selection in ss-local,
  ss-redir and ss-tunnel with libsodium randombytes_uniform(): unbiased,
  unpredictable, and no seeding required (cert-msc30/msc32).
- Mark FATAL() noreturn so both the compiler and analyzers understand
  control flow (removes a family of analyzer false positives).
- Drop two dead stores (manager.c restore_sigchld, udprelay.c src_addr_len).

All remaining findings were verified as false positives and carry NOLINT
comments with rationale (uthash macro internals, symmetric back-pointer
cleanup, analyzer-invisible postconditions). clang-tidy-18 on Linux now
reports zero warnings, so MAX_WARNINGS drops from 29 to 0.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 13:02:58 +08:00
Max Lv 5559eec939 Harden security-sensitive input handling (#3045)
* harden security-sensitive input handling

* enable ctest failure checks in ci

* add valgrind leak smoke tests

* split tests into separate workflow
2026-07-15 11:10:24 +08:00
Maxim Galaganov d61d09aa0c Detect kernel support for MPTCP at runtime 2022-06-23 10:38:32 +08:00
Not Sure 36d9993bbf Add --tcp-incoming-rcvbuf and --tcp-outgoing-rcvbuf which allow precise control over TCP receive buffers. 2020-12-23 07:13:14 +08:00
Not Sure 920dbac0d3 Missing config file parsing logic. 2020-12-23 07:13:14 +08:00
babarosaM33 a727596faa jconf: fix memory leak 2020-08-04 21:56:45 +08:00
zfl9 78784507f1 add tcp_tproxy option, use tproxy instead of redirect (tcp) 2020-07-18 16:23:21 +08:00
root 02f25e588c add ss-manager read manager_address from config.json 2020-05-02 10:57:36 +08:00
Max Lv 64b97cd9a3 Clean up 2019-07-17 09:16:06 +08:00
Max Lv 4a42da641b Allow bind to local IPv4/v6 addresses. Fix #2372 2019-05-09 10:59:16 +08:00
Chinsyo 7bd382042b bump copyright year 2019-03-21 12:39:29 +08:00
Max Lv 14dd82045e Refine json config handling. #2308 2019-03-05 09:52:44 +08:00
Max Lv 144138788b Refine ipv6 only handling. #2300 2019-03-01 07:32:25 +08:00
Max Lv 404ec62b79 Fix #2285 2019-02-18 09:59:40 +08:00
Max Lv c33cf3efc0 Fix #2267 2019-01-21 12:12:42 +08:00
Simon Shi 0c2bda940c Rename variable 2019-01-05 09:34:52 +08:00
Simon Shi f268b278c0 Test homedir for ss-manager
Fix for user args
2019-01-04 23:11:25 +08:00
Max Lv 85a64ae836 Bump version 2018-01-15 17:25:03 -08:00
Max Lv 539bf6e66d Avoid reconstructing requests with SNI/HTTP parser 2018-01-07 18:17:21 -08:00
Max Lv b26cbc2755 Refine #1852 2017-12-25 15:31:27 +08:00
星野ハジメ cc1bb4cf62 format with .uncrustify.cfg (#1759)
* format with .uncrustify.cfg

format with .uncrustify.cfg

* format with .uncrustify.cfg

* format with .uncrustify.cfg exclude json.* base64.* uthash.h

* format with .uncrustify.cfg exclude json.* base64.* uthash.h
2017-10-30 21:28:53 +08:00
星野ハジメ 44027da326 enable TCP_NODELAY from config file (#1757)
* Fix #1739

Refine #1739

* enable TCP_NODELAY from config file
2017-10-30 10:35:14 +08:00
Max Lv f19a96e1fa Refine #1739 2017-10-18 09:29:32 +08:00
Max Lv b3f3b58a1d Fix #1739 2017-10-16 15:51:05 +08:00
Max Lv f8283fcc89 Fix #1626 2017-08-12 22:39:45 +08:00
Yousong Zhou db1728c76d decouple use_syslog from pid_flags
Sometimes we need processes to run in the foreground to be supervised
and at the same time use syslog facility instead of logging its stdout,
stderr output
2017-08-01 22:59:38 -07:00
Lucas BEE 44feddd4f6 ss-redir: Add option to disable SNI feature
Add an option 'disable_sni' in the config file to allow clients running
ss-redir to disable the HTTP/SNI feature
2017-05-23 06:23:53 +08:00
Martin Wetterwald 6e069c7edb ss-redir: allow you to define additionals listenings ports to set a TOS/DSCP on the outgoings ciphered connections 2017-03-08 13:58:28 +08:00
Max Lv b655fb2b8f Replace nonce cache with a ping-pong bloom filter (#1282)
* Add Ping-Pong bloom filter

* Refine bloom filter insertion

* Reduce the error rate to 0.00001

* Avoid alignment issue in murmurhash2

* Fix a memory leak

* Fix build on non-GPU targets

* Detect get_current_dir_name in configure

* Update README.md

* Remove redudant bfree()

* Reduce the memory usage for local client

* Fix #1275

* Refine #1275

* Use IP when bypassing SNI domains

* Also apply replay detector on UDP traffic

* Update deb build script

Now build script is able to auto detect system and choose libraries
necessary to build.

Also update the README accordingly.

* Update build script to enable jessie/stretch etc

Also include a few cleanup that simplified pkg installation from
backports repository.
2017-02-20 10:29:32 +08:00
Max Lv ef0402eb10 Add --key option to set key directly (#1207) 2017-02-06 17:02:04 +08:00
Kim bf14944490 fixed json_null => NULL (#1193)
The json_null should be C NULL.
2017-02-05 07:14:19 +08:00
Max Lv dde1bf7dec Fix a potential issue in parse_addr 2017-02-04 18:36:06 +08:00
Max Lv 7b290f30d6 Make SO_REUSEPORT disabled by default 2017-02-02 21:05:57 +08:00
Max Lv 4ebe5aeb12 Add SIP004 (AEAD) support 2017-01-29 10:10:44 +08:00
Max Lv bcdc5559a8 Fix #1122 2017-01-23 08:39:11 +08:00
Max Lv 0acc79b430 Fix UDP relay when plugin enabled 2017-01-14 12:34:05 +08:00
Max Lv 92f0baa789 Update SIP003 interfaces 2017-01-14 10:40:14 +08:00
Max Lv 61b82c45c5 Add SIP003 plugin support (#1044)
https://github.com/shadowsocks/shadowsocks-org/issues/28
2017-01-08 01:10:00 -06:00
Max Lv 8cb4f81eba Add HTTP/TLS obfuscating. [SIP001] (#1009)
Add experimental HTTP/TLS obfuscating as an **optional extension** of shadowsocks protocol.

More discussions can be found here: https://github.com/shadowsocks/shadowsocks-org/issues/26

As this feature is still a SIP (Shadowsocks Improvement Proposal), it's very unstable and experimental. So, 

1. Don't enable it unless you know what it is.
2. Be very careful when using it in production environment.
2016-12-27 02:53:25 -06:00
Max Lv 134a35fd6c Refine addr resolving 2016-12-20 22:17:04 +08:00
Rayson zhu a8fdd77fbf add user config option 2016-11-25 02:10:17 -06:00
Rayson zhu dbf00467e0 Fix read_jconf
1. a memory leak
2. missing type check
2016-11-16 10:19:45 +08:00
Rayson Zhu d1765df9f9 support ipv6_first option in config file (#946) 2016-11-13 23:32:43 -06:00
Max Lv b28638ab80 Clean up 2016-09-09 13:17:58 +08:00
Max Lv 64870a276b Add HTTP/SNI parser (#809)
* WiP: add HTTP/SNI parser

* WiP: replace hostname with HTTP/SNI header

* WiP: add ACL

* Fix white list

* Replace free() with ss_free()

* Refine sockaddr handling

* Add HTTP/SNI support to redir
2016-09-08 10:10:23 +08:00
Max Lv d319c0300c Add mptcp option, close #756 2016-08-04 13:30:39 +08:00
anonymous-contributor af69798355 New jconf parameters (#695)
* Add 'tunnel_address' support for json config parser

And allow ss-tunnel to use the newly introduced parser.

Signed-off-by: Adam Anonymous <anonymous_temp_user@yahoo.co.jp>

* Add "mode" support for jconf

Now jconf supports "mode" setting, allowed values are "tcp_only",
"tcp_and_udp" and "udp_only".

Signed-off-by: Adam Anonymous <anonymous_temp_mail@yahoo.co.jp>

* Use jconf "mode" for server/local/tunnel/manager

Signed-off-by: Adam Anonymous <anonymous_temp_mail@yahoo.co.jp>

* Add per-project vimrc to gitignore

As the coding style differs from kernel and other projects, so such
project vimrc should be helpful.

Signed-off-by: Adam Anonymous <anonymous_temp_mail@yahoo.co.jp>
2016-06-30 23:19:13 -05:00