secnet (0.6.0~) unstable; urgency=medium * secnet: Make stderr line buffered * logfile: Log to stderr by default (`filename' key now optional) * logfile: Do not log differently with --nodetach * logfile: New `prefix' option. internal refactorings in secnet test suite * stest: Use stderr, not tty, for logging * stest: Use new `prefix' option. * stest: Add debug logs * tests, mtest: Provide and use `prexec' for helping with debugging * stest: Print the secnet runes we run * stest: Print the special env vars we pass to secnet * stest: Don't prefix ./ with another ./, in socktmp * stest: Support not running secnet ourselves * stest: Replace the call to `exit 1' with a new proc `finish' * stest: Record the pids of of the secnets we spawn * stest: Kill our child secnets when we call finish * stest: Use `finish' for success exits * stest: If one of our secnets dies, call the test a failure * stest: Decode the slip packets that come via fake netlink * stest: Check that received packet is as expected * stest: Drop a redundant test * mtest/t-prefix: Drop redundant setting of seddery * test-example: Rules for making a privkeys directory * test-example: Make privkeys by default * test-example: Add the inside.key to the privcache too * test-example: Add a 2nd rsa1 key * stest: Transfer pubkeys from test-example * stest: Provide a global `hash' key * stest: Honour new privkey() hash * tests: Pass --output-version=1 to make-secnet-sites * test-example: Provide a new-style public key set for site outside * test-example: Make sites.conf variable, in principle * test-example: Generate new style sites.conf * test-example: Test new long-term key arrangements * test-example: all-privkeys: Define, and indirect through, a variable * stest: Fix an entry in &DEPS * mtest: Use --pubkeys-elide instead of --output-version * stest: Honour new sitesconf_hook * stest/t-nonnego-oo: Use `make-public' verb * test-common: Use $(wildcard ) rather than $(shell echo ) * test-common: Framework for compatibility tests * stest: Machinery for runing an old secnet if a test wants * sest/t-Cnonnego-on: New test * stest: Make it possible to have kex initiated by `outside' * stest/t-Cnonnego-onr: New test * stest: Add test for load-private * stest: Introduce adj-after * stest: Honour SECNET_STEST_TIMEOUT_MUL to multiply timeouts * stest: Move puts $argl into divert branches * stest: When SECNET_STEST_DIVERT_* set, print diverted command too * stest: Require SECNET_STEST_DIVERT_* paths to start / or ./ * stest: Allow SECNET_STEST_DIVERT_*='i ' * stest: Print spawn rune on a line by itself * test-example: Use subdirmk's new &:macro feature administrivia * dir-locals: Provide python-indent-offset too * Provide osdep.[ch], currently empty * portability: Provide implementation of fmemopen build system * configure.ac: Drop checks for systems lacking stdint.h * configure.ac: Drop AC_STDC_HEADERS * configure.ac: Do not check for lack of standard headers * autogen.sh: Write a comment about need for autoheader * parallel bisect scripts: ad-hoc * parallel bisect scripts: Better logging * parallel bisect scripts: Honour $1 as iteration count * build system: Fix race bug in recheck target make-secnet-sites tainting * make-secnet-sites: Tainted: Fix a lot of bad return values config * conffile: find_cl_if: fix fail_if_invalid==False * config: Reject rather than silently ignoring wrong closure values bugfixes * rsa: emsa_pkcs1: Fix a message * site: Move earlier all things needed for slog * dh: Fix mpz padding bug in use of write_mpbin * mobile sites: Do not ever expire peer addresses new signature scheme key handling * pubkey handling: Document key sets, id, etc. plan * sigkey handling: Introduce sigkeyid type * sigkey handling: define MAX_SIG_KEYS * sigkey handling: Introduce serialt type * sigpubkey/sigprivkey: Provide a hash_if * sigpubkey/sigprivkey: Provide a dispose() method * sigscheme: Interface for signature schemes * privcache: New closure for signature key handling * privcache: Use new pathprefix_template facility * privcache: Better debug * privcache: Remove some spurious \n in messages * site: New SIGKEYS log class, at level INFO, enabled by default * NOTES: Add protocol elements for public key negotiation * site: generate_msg: Introduce `privkey' variable * site: Introduce `pubkey' variable (twice) * site: Be able to use multiple private keys * site: Read public peer keys from key file * site: Update peer keys from ~update file * site: Write an argument for the soundness of key file update * site: key update soundness argument: deal with concurrency * site: Reserve ~tmp for make-secnet-sites * site: Remove a spurious \n in a message * secnet: Provide `make-public' verb base91 * README: Introduce spec for "base91s" encoding * B91 C DUMMY SYMLINK - WILL BE SUBTREE MERGE * base91: CREDITS: Add information about C library * base91: Build the C basE91 code with our own renaming * base91: Patch the C version for our charset change * base91: Link it into secnet * BASE91 PYTHON DUMMY SYMLINK - WILL BE SUBTREE MERGE * base91: CREDITS: Add information about Python library * base91: Python: make `import' work * pubkeys: Provide parser (and spec) for peer pubkeys files * pubkeys: Provide ability to add extra action to KEYWORD * pubkeys: Provide `fallback_skip' variable * pubkeys: Introduce `pkgf' fallback groups * pubkeys: Print file path in some log messages * pubkeys: Move path and lno into a struct cloc * pubkeys: Pass a cloc to loadpub * pubkeys: Improve debug message for expected ENOENT * pubkeys: Better debug logging for syntax errors * pubkeys: Do not mind missing serial rsa1 [stuff to support new scheme] * rsa1: Drop filename from two error messages * rsa: Strip a couple of spurious newlines from pub key messages NEEDS FIX/CHECK * README: Document new semantics for `hash' * privcache; uncached_load_file: Introduce error_out * docs: Fix rsapriv/rsapub closure names * docs: Move peer-keys documentation into a README file mss * make-secnet-sites: Deduplicate `complain' * make-secnet-sites: Tolerate late `complain' * make-secnet-sites: Write output to ...~tmp~ and rename * make-secnet-sites: Tainted.name: take `what' * make-secnet-sites: Tainted: Provide hexid and base91 * make-secnet-sites: set_property: Break out kw * make-secnet-sites: set_property: Break out propname * make-secnet-sites: set_property: Support "aliases" * make-secnet-sites: pubkeys: Allow multiple * make-secnet-sites: Provide --debug and debugrepr * make-secnet-sites: Tainted: Provide some commented-out debug * make-secnet-sites: Introduce FilterState * make-secnet-sites: pline: Break up `copyout' * make-secnet-sites: Provide base91s_encode and base91s_decode * make-secnet-sites: Provide --output-version option * make-secnet-sites: Allow properties to control output to sites * make-secnet-sites: Provide ArgActionLambda * make-secnet-sites: Provide `serial' property class * make-secnet-sites: Prepare for multiple public key types * make-secnet-sites: Support new `pub' directive * make-secnet-sites: Make the `pub' key name primary * make-secnet-sites: Do not write `pub' entries in v1 output * make-secnet-sites: Do not use `copy' in pubkey forsites * make-secnet-sites: Write rsa1 keys as `pub rsa1 ...' in >=v2 * make-secnet-sites: Handle `pub rsa1' properties specially * make-secnet-sites: Add new pubkeys-dir option, and pubkey paths * make-secnet-sites: New --pubkeys-install option * make-secnet-sites: Without --pubkeys-install, write appropriate key * make-secnet-sites: Support `serial' * make-secnet-sites: Support `pkg' and `pkgf' * make-secnet-sites: In v1 output, ignore keys for non-0 groups * make-secnet-sites: Rework with new `inpub' class * make-secnet-sites: Rework --pubkeys-MODE, provide --pubkeys-single * make-secnet-sites: New --pubkeys-elide mode * make-secnet-sites: Declare `pubkey' directive old * make-secnet-sites: Introduce new OpMod classes * make-secnet-sites: Refactor operational code into OpModes * make-secnet-sites: Move sites file writing into OpBase * make-secnet-sites: OpBase.read_in: save read lines * make-secnet-sites: Provide explicit --conf mode option * make-secnet-sites: Abolish now-obsolete `service' variable * make-secnet-sites: OpBase.write_out: Tolerate sitesfile is None * make-secnet-sites: OpBase.write_out: Move heading back into OpUserv * make-secnet-sites: OpUserv: Rename sitesfile to outputfile * make-secnet-sites: OpConf: Move positional_args to OpBase * README.make-secnet-sites: Slightly restructure mode docs * make-secnet-sites: Provide --filter mode * mtest/t-filter: New test for --filter mode other changes * site: Always advertise all capabilities * rsa: Bring hash selection in-house * sig: Abolish sethash and defhash everywhere -- secnet (0.5.1) unstable; urgency=medium POTENTIALLY INCOMPATIBLE CHANGE. Some security implications. * make-secnet-sites: Prefix names when writing secnet sites.conf file. make-secnet-sites must copy names (vpn, location and site names) from the input sites file (which is not wholly trusted) to the secnet config file. Prior to this release, naming a location or site the same as a secnet predefined name could generate a broken sites.conf which secnet would reject. (With the existing featureset, malfunctions other than rejection, eg privilege escalation, are not possible.) make-secnet-sites now adds a prefix to these names when writing sites.conf. This will not affect configurations which use the make-secnet-sites-provided `all-sites' key, as is usual. Other configurations will break unless the references in the static part of the config are adjusted. Previous behaviour can be restored with the --no-conf-key-prefix option. (Planned future enhancements to secnet are likely to make use of that option, with untrusted input, dangerously insecure.) other changes to make-secnet-sites: * Fix argument parsing. Fixes a regression affecting -P in 0.5.0, and also fixes new facilities introduced in 0.5.0. * Sort the properties on output (and adjust the test case expected outputs). Tests now pass on (at least) Python 2.7.13, 3.5.3, 3.7.5. * Delete some unused code. secnet: * Change one idiom to avoid a warning from GCC9. No functional change. build system - MAJOR CHANGES: * Fix out-of-tree builds. (Broken in 0.5.0) * Replace recursive make with use of the new subdirmk system. This represents a fairly comprehensive overhaul of the makefiles. Several bugs (esp. involving dependencies between files in different directories) are fixed. * Drop `make check' from `make all'. (Otherwise there is no way to ask for `all' without `check'.) * Suppress two unhelpful new compiler warnings from GCC9. * Release checklist update. documentation: * Creit Mark Wooding properly in CREDITS. * Include DEVELOPER-CERTIFICATE. tests: * Locations now have different names to sites. * Somewhat better debugging output from mtest. * Do not run msgcode-test except with `make fullcheck'. * Other minor bugfixes and improvments. * stest: Suppress unhelpful -Wno-unused-result (needed for stretch). -- Ian Jackson Fri, 22 Nov 2019 23:13:14 +0000 secnet (0.5.0) unstable; urgency=medium make-secnet-sites SECURITY FIX: * Do not blindly trust inputs; instead, check the syntax for sanity. Previous releases can be induced to run arbitrary code as the user invoking secnet (which might be root), if a secnet sites.conf is used that was generated from an untrustworthy sites file. * The userv invocation mode of make-secnet-sites seems to have been safe in itself, but it previously allowed hazardous data to be propagated into the master sites file. This is now prevented too. make-secnet-sites overhaul work: * make-secnet-sites is now in the common subset of Python2 and Python3. The #! is python3 now, but it works with Python2.7 too. It will probably *not* work with old versions of Python2. * We no longer depend on the obsolete `ipaddr' library. We use `ipaddress' now. And this is onlo a Recommends in the .deb. * Ad-hoc argument parser been replaced with `argparse'. There should be no change to existing working invocations. * Bad address syntax error does not wrongly mention IPv6 scopes. * Minor refactoring to support forthcoming work. [Mark Wooding] other bugfixes, improvements and changes to secnet itself: * Better logging of why we are sending NAK messages. * Correctly use the verified copy of the peer remote capabilities from MSG3. (Bug is not a vulnerability.) [Mark Wooding] * Significant internal rearrangements and refactorings, to support forthcoming key management work. [Mark Wooding and Ian Jackson] build system etc.: * Completely overhaul release checklist; drop dist target. * Remove dependency on `libfl.a'. [Mark Wooding] * polypath.c: Fix missing include of . [Mark Wooding] * Add a Wireshark dissector `secnet-wireshark.lua'. It is not installed anywhere right now. [Mark Wooding] documentation: * Improve documentation of capability negotiation in NOTES, secnet(8) and magic.h. [Mark Wooding] -- Ian Jackson Thu, 24 Oct 2019 19:11:54 +0100 secnet (0.4.5) unstable; urgency=medium * INSTALL: Mention that rsa key generation might need ssh-keygen1. * mobile: Fix negotiation bug with mixed old/new secnets and simultaneous key setup attempts by each end. [Mark Wooding] * Makefile.in: Support installation from a `VPATH' build. [Mark Wooding] * Portability fixes for clang. [Mark Wooding] -- Ian Jackson Sat, 21 Sep 2019 12:04:31 +0100 secnet (0.4.4) unstable; urgency=medium Security fix: * make-secnet-sites: Don't allow setting new VPN-level properties when restricted. This could allow denial of service by users with delegated authorisation. [Mark Wooding] Bugfixes for poor network environments: * polypath: cope properly with asymmetric routing, by correcting the handling of late duplicated packets etc. Protocol is now incompatible with secnet prior to 0.3.0 when either end is mobile. * Randomise key setup retry time. Other bugfixes: * rsa and cbcmac: Fix configuration error messages. [Mark Wooding] * Handle IPv4 addresses properly (ie, not foolishly byte-swapped), when IPv6 is not available. [Mark Wooding] * Better logging (and less foolish debug), especially about whether key is set up, and about crossed key setup attempts. * Internal refactoring and fixes. [Ian Jackson and Mark Wooding] Build system and portability: * configure: rerun autogen.sh with autoconf 2.69-10 * Avoid memset(0,0,0) wrt st->sharedsecret. (Fixes compiler warning; in theory might cause miscompilation.) [Mark Wooding] Documentation: * README.make-secnet-sites: new documentation file. [Mark Wooding] * NOTES: Describe current allocation of capability bits. [Mark Wooding] * NOTES: tiny fix tot protocol description. * secnet(8): Delete wrong information about dh groups. [Mark Wooding] Administrivia: * Fix erroneous GPL3+ licence notices "version d or later" (!) * .dir-locals.el: Settings for Python code. [Mark Wooding] -- Ian Jackson Sun, 08 Sep 2019 22:53:14 +0100 secnet (0.4.3) unstable; urgency=low Security improvement: * Use `mpz_powm_sec' for modexps. Enhancements: * Implement comm-info and dedicated-interface-addr feature, for benefit of hippotat. * Implement `keepalive' site option, to try to keep link always up. Build etc. fixes: * #include (fixes the build on jessie). * Tolerate building from a git checkout, but with git not installed. (This can happen in chroots.) * Turn off -Wsign-compare for bison output. * Makefile.in: Fix `check-ipaddrset' rule to get reference from $(srcdir). (Makes out-of-tree builds work properly.) * Release checklist fixes. * Burn version numbers 0.4.1 and 0.4.2 due to errors in release prep. Bugfixes: * When printing messages about dropping IPv6, do not print anything about ihl. (Check the IP version field first!) * When turning on debug, turn on verbose too. -- Ian Jackson Sat, 25 Nov 2017 13:36:41 +0000 secnet (0.4.0) unstable; urgency=low Debugging improvements: * Packet-level debugging from site notes errors from transmit. * Report when transport peers updated as a result of transmit. -- Ian Jackson Sat, 28 Feb 2015 15:03:00 +0000 secnet (0.4.0~beta2) unstable; urgency=low Polypath bugfixes: * Ignore IPv6 Unique Local unicast addresses. * Skip "tentative" IPv6 local addresses. * Improve logging and debug output. Portability fix: * Build where size_t is not compatible with int. Build system and packaging fixes: * Makefile: support DESTDIR. * debian/rules: set DESTDIR (not prefix). * debian/rules: Support dpkg-buildflags. * Install ipaddrset.py and secnet.8 with correct permissions. * Fix check for and git rid of our copy. * Use -lresolv only if inet_aton is not found otherwise. * Use -lnsl only if inet_ntoa is not found otherwise. * debian/rules: Provide build-arch and build-indep targets. * debian/rules: Do not run build for *-indep (!) * Makefile.in: Putative dual (backport and not) release build process doc. Copyright updates: * Update to GPLv3. Add missing copyright notices and credits. * Get rid of old FSF street address; use URL instead. * Remove obsolete LICENCE.txt (which was for snprintf reimplementation). * Remove obsolete references to Cendio (for old ipaddr.py). -- Ian Jackson Sun, 28 Dec 2014 17:14:10 +0000 secnet (0.4.0~beta1) unstable; urgency=low New features: * Support transport over IPv6. (We do not yet carry IPv6 in the private network.) IPv6 support depends on IPv6-capable adns (adns 1.5.x). * New polypath comm, which can duplicate packets so as to send them via multiple routes over the public network, for increased reliability/performance (but increased cost). Currently Linux-only but should be fairly easy to port. * Support multiple public addresses for peers. * Discard previously-received packets (by default). Logging improvements: * Report (each first) transmission and reception success and failure. * Log reason for DNS reolution failure. * Log unexpected kinds of death from userv. * Log authbind exit status as errno value (if appropriate). Configuration adjustments: * Adjust default number of mobile peer addresses to store when a peer public address is also configured. * Make specifying peer public port optional. This avoids making special arrangements to bind to a port for in mobile sites with no public stable address. Bugfixes: * Hackypar children will die if they get a terminating signal. * Fix signal dispositions inherited by secnet's child processes. * Fix off-by-one error which prevented setting transport-peers-max to 5. Test, build and internal improvements: * Use conventional IP address handling library ipaddr.py. * Provide a fuzzer for the slip decoder. * Build system improvements. * Many source code cleanups. -- Ian Jackson Sun, 26 Oct 2014 15:28:31 +0000 secnet (0.3.4) unstable; urgency=low SECURITY FIX: * The previous security fix to buffer handling was entirely wrong. This one is better. Thanks to Simon Tatham for the report and the patch. -- Ian Jackson Mon, 22 Sep 2014 16:16:11 +0100 secnet (0.3.3) unstable; urgency=high SECURITY FIXES: * Pass correct size argument to recvfrom. This is a serious security problem which may be exploitable from outside the VPN. * Fix a memory leak in some error logging. Other related fixes: * Two other latent bugs in buffer length handling found and fixed. * Non-critical stylistic improvements to buffer length handling, to make the code clearer and to assist audit. -- Ian Jackson Fri, 19 Sep 2014 23:50:45 +0100 secnet (0.3.3~beta1) unstable; urgency=low Installation compatibility fix: * In make-secnet-sites, always use our own ipaddr.py even if the incompatible modern ipaddr.py is installed (eg via python-ipaddr.deb). (Future versions of secnet are going to need that Python module to be installed.) For links involving mobile sites: * Use source of NAK packets as hint for peer transport address. * When initiating rekey, make use of data transport peer addresses. Build fix: * Provide clean target in test-example/Makefile. -- Ian Jackson Fri, 19 Sep 2014 00:11:44 +0100 secnet (0.3.2) unstable; urgency=low * Release of 0.3.2. No code changes since 0.3.1~beta1. -- Ian Jackson Thu, 26 Jun 2014 20:27:58 +0100 secnet (0.3.2~beta1) unstable; urgency=low For links involving mobile sites: * SECURITY: Properly update peer address array when it is full. * Do name-resolution on peer-initiated key setup too, when we are mobile (and other name-resolution improvements). Other minor improvements: * Log peer addresses on key exchange timeout. * When printing version (eg during startup), use value from git-describe and thus include git commit id where applicable. * Updates to release checklist in Makefile.in. * Use C99 _Bool for bool_t. -- Ian Jackson Fri, 06 Jun 2014 01:17:54 +0100 secnet (0.3.1) unstable; urgency=low * Release of 0.3.1. No code changes since 0.3.1~beta3. -- Ian Jackson Thu, 15 May 2014 01:08:30 +0100 secnet (0.3.1~beta3) unstable; urgency=low * Build fixes for non-i386 architectures and gcc 4.8.2. -- Ian Jackson Thu, 08 May 2014 19:53:43 +0100 secnet (0.3.1~beta2) unstable; urgency=low Fix relating to new fragmentation / ICMP functionality: * Generate ICMP packets correctly in point-to-point configurations. -- Ian Jackson Sat, 03 May 2014 18:58:09 +0100 secnet (0.3.1~beta1) unstable; urgency=low Security fixes (vulnerabilities are to inside attackers only): * SECURITY: Fixes to MTU and fragmentation handling. * SECURITY: Correctly set "unused" ICMP header field. * SECURITY: Fix IP length check not to crash on very short packets. New feature: * Make the inter-site MTU configurable, and negotiate it with the peer. Bugfixes etc.: * Fix netlink SEGV on clientless netlinks (i.e. configuration error). * Fix formatting error in p-t-p startup message. * Do not send ICMP errors in response to unknown incoming ICMP. * Fix formatting error in secnet.8 manpage. * Internal code rearrangements and improvements. Packaging improvements: * Updates to release checklist in Makefile.in. * Additions to the test-example suite. -- Ian Jackson Thu, 01 May 2014 19:02:56 +0100 secnet (0.3.0) unstable; urgency=low * Release of 0.3.0. No code changes since 0.3.0~beta3. * Update release checklist. -- Ian Jackson Sun, 01 Sep 2013 20:27:48 +0100 secnet (0.3.0~beta3) unstable; urgency=low * New upstream version. - Stability bugfix: properly initialise site's scratch buffer. -- Ian Jackson Mon, 05 Aug 2013 11:54:09 +0100 secnet (0.3.0~beta2) unstable; urgency=low * New upstream version. - SECURITY FIX: RSA public modulus and exponent buffer overflow. - SECURITY FIX: Use constant-time memcmp for message authentication. - SECURITY FIX: Provide a new transform, eax-serpent, to replace cbcmac. - SECURITY FIX: No longer send NAKs for NAKs, avoiding NAK storm. - SECURITY FIX: Fix site name checking when site name A is prefix of B. - SECURITY FIX: Safely reject too-short IP packets. - Better robustness for mobile sites (proper user of NAKs, new PROD msg). - Better robustness against SLIP decoding errors. - Fix bugs which caused routes to sometimes not be advertised. - Protocol capability negotiation mechanism. - Improvements and fixes to protocol and usage documentation. - Other bugfixes and code tidying up. -- Ian Jackson Thu, 25 Jul 2013 18:26:01 +0100 secnet (0.3.0~beta1) unstable; urgency=low * New upstream version. - SECURITY FIX: avoid crashes (or buffer overrun) on short packets. - Bugfixes relating to packet loss during key exchange. - Bugfixes relating to link up/down status. - Bugfixes relating to logging. - make-secnet-sites made more sophisticated to support two vpns on chiark. - Documentation improvements. - Build system improvements. * Debian packaging improvements: - Native package. - Maintainer / uploaders. - init script requires $remove_fs since we're in /usr. -- Ian Jackson Thu, 12 Jul 2012 20:18:16 +0100 secnet (0.2.1-1) unstable; urgency=low * New upstream version. (authbind endianness fix) -- Ian Jackson Sun, 11 Dec 2011 13:14:57 +0000 secnet (0.2.0-1) unstable; urgency=low * New upstream version. -- Ian Jackson Sat, 10 Dec 2011 22:44:41 +0000 secnet (0.1.18-1) unstable; urgency=low * New upstream version. -- Stephen Early Tue, 18 Mar 2008 17:45:00 +0000