1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 09:58:01 +00:00
Commit Graph

4326 Commits

Author SHA1 Message Date
Jacob Nevins
222c134b5f Add fuzzterm to .gitignore. 2015-11-08 11:58:45 +00:00
Simon Tatham
b003e5cf53 Fix an SSH-breaking bug from the fuzzing merge.
When we set ssh->sc{cipher,mac} to s->sc{cipher,mac}_tobe
conditionally, we should be conditionalising on the values we're
_reading_, not the ones we're about to overwrite.

Thanks to Colin Harrison for this patch.
2015-11-07 20:15:24 +00:00
Simon Tatham
f3230c8545 More post-release checklist updates, and a new script.
I've added a few sample shell commands in the upload procedure (mostly
so that I don't have to faff about remembering how rsync trailing
slashes work every time), and also written a script called
'release.pl', which automates the updating of the version number in
all the various places it needs to be done and also ensures the PSCP
and Plink transcripts in the docs will match the release itself.
2015-11-07 16:14:28 +00:00
Simon Tatham
3552f37ba5 One small post-release checklist tweak.
I spotted that I've been checking that old-style Windows Help files
were delivered with content-type "application/octet-stream", but not
also checking the same thing about the marginally newer .CHM ones. (Or
at least not writing it down in the wishlist; I think I did actually
check on at least one occasion.)
2015-11-07 15:15:07 +00:00
Simon Tatham
f14382ccce Make 'make install' ignore the new 'fuzzterm' binary.
It's for regression testing and fuzzing, so there's no use for it if
you're not a developer working on the source.

Leaving it out of the 'make install' target in Makefile.gtk is no
trouble because that's already handled manually in Recipe by inserting
a giant hairy Makefile fragment to do the installation. But
Makefile.am was just setting bin_PROGRAMS to the full set of binaries
built, so for that one, I had to invent a new Recipe program category
[UT] which moves a particular binary into noinst_PROGRAMS.

While I was at it, I've retired the [M] program category, which has
been lying around unused since Ben's old Mac OS pre-X port.
2015-11-07 14:54:36 +00:00
Simon Tatham
fe16b577ef Fix a build failure coming from the fuzzing branch.
Apparently if you maintain a branch for a long time where you only
compile with a non-default ifdef enabled, it becomes possible to not
notice a typo you left in the default branch :-)
2015-11-07 14:53:48 +00:00
Simon Tatham
2057f7a9f8 Merge Ben's branch on which he's been fuzzing PuTTY.
This includes fixes arising from the fuzzing, and also changes to make
the code compile into usefully fuzzable forms.
2015-11-07 13:29:53 +00:00
Simon Tatham
503061e569 Post-0.66 release checklist updates.
The one-off reminder to finish the key rollover is now done, so I can
remove it.
2015-11-07 10:12:00 +00:00
Simon Tatham
8fdeb3a95c Merge tag '0.66'
This brings in the rest of the 0.66 branch, including some changes new
on master.

Conflicts:
        doc/plink.but
        sshrsa.c

(The conflicts were both trivial: in one, the addition of an extra
parameter to rsa2_newkey on master happened on the line next to 0.66's
addition of a check for NULL return value, and in the other, I'd got
the version number in the plink -h transcript messed up on master.)
2015-11-07 09:54:05 +00:00
Simon Tatham
07af4ed100 Update version number for 0.66 release. 2015-11-07 09:53:03 +00:00
Simon Tatham
986b8f87be Document the new session-logging command line options.
If I'm going to announce them as a feature in 0.66, it would be
embarrassing to forget to mention them in the documentation.
2015-11-07 09:53:03 +00:00
Simon Tatham
009ab4a20c Initial 'merge -s ours' from 0.66 release branch.
Everything up to here on the release branch is cherry-picks from
master anyway, and some of their cherry-picked forms conflict with the
current state of master due to further work, so here I'm just
recording an ancestry relation to indicate that there's nothing up to
here on 0.66 that master hasn't got.
2015-11-07 09:14:42 +00:00
Jacob Nevins
7552ddb002 PuTTYgen's default hasn't been 1024 bits since 0.63.
(cherry picked from commit 9f9d72ec58)
2015-10-29 09:27:55 +00:00
Simon Tatham
98c946966b Fix winhandl.c's failure to ever free a foreign handle.
Handles managed by winhandl.c have a 'busy' flag, which is used to
mean two things: (a) is a subthread currently blocked on this handle
so various operations in the main thread have to be deferred until it
finishes? And (b) is this handle currently one that should be returned
to the main loop to be waited for?

For HT_INPUT and HT_OUTPUT, those things are either both true or both
false, so a single flag covering both of them is fine. But HT_FOREIGN
handles have the property that they should always be waited for in the
main loop, but no subthread is blocked on them. The latter means that
operations done on them in the main thread should not be deferred; the
only such operation is cleaning them up in handle_free().

handle_free() was failing to spot this, and was deferring freeing
HT_FOREIGN handles until their subthread terminated - which of course
never happened. As a result, when a named pipe server was closed, its
actual Windows event object got destroyed, but winhandl.c still kept
passing it back to the main thread, leading to a tight loop because
MsgWaitForMultipleObjects would return ERROR_INVALID_HANDLE and never
block.

(cherry picked from commit 431f8db862)
2015-10-29 09:27:54 +00:00
Simon Tatham
72b659cb72 Add a FAQ for 'checksum mismatch' reports.
The aim is to try to reduce the incidence of the two least helpful
classes of those reports: the ones which have just got mismatched
checksum files, and the ones which don't tell us the information that
would help.

(cherry picked from commit 8ff3b22243)
2015-10-29 09:27:53 +00:00
Ben Harris
6627c1ce13 fuzzterm: record characters being displayed. 2015-10-28 22:08:59 +00:00
Ben Harris
9022dcd5c5 fuzzterm: add some output to allow this to be used for testing.
Not very much, but it might be useful for testing that changes don't
unexpectedly break things.
2015-10-28 22:08:59 +00:00
Ben Harris
7a5cb2838f Emit a distinct error message when the SSH server's host key is invalid.
This also means that FUZZING can just ignore host-key verification
failure while preserving invalid-host-key errors.
2015-10-28 22:08:59 +00:00
Ben Harris
12702cb17e Fix a null-pointer dereference in ecdsa_verifysig.
Bug found with the help of afl-fuzz.
2015-10-28 22:08:59 +00:00
Ben Harris
af1460d6e5 Add FUZZING support to ssh.c.
This adds the "none" cipher and MAC, and also disables kex signure
verification and host-key checking.  Since a client like this is
completely insecure, it also rewrites the client version string to
start "ISH", which should make it fail to interoperate with a real SSH
server.  The server version string is still expected to begin "SSH" so
the real packet captures can be used against it.
2015-10-28 22:08:58 +00:00
Ben Harris
5471539a67 Handle packets with no type byte by returning SSH_MSG_UNIMPLEMENTED.
The previous assertion failure is obviously wrong, but RFC 4253 doesn't
explicitly declare them to be a protocol error.  Currently, the incoming
packet isn't logged, which might cause some confusion for log parsers.

Bug found with the help of afl-fuzz.
2015-10-28 22:08:58 +00:00
Ben Harris
1d20c1b396 Add FUZZING build option that disables the random number generator.
Starting up the random number generator is by far the slowest part of
plink's startup, and randomness is bad for fuzzing, so disabling it
should make fuzzing more effective.
2015-10-28 22:08:58 +00:00
Ben Harris
f6b81af006 Add an explicit PROXY_FUZZ that just feeds a file into the backend.
This saves the need to fork and exec "cat", which should speed things
up.  It also ensures that the network output goes to /dev/null, which
should avoid problems with blocking when writing to a full pipe.
2015-10-28 22:08:58 +00:00
Ben Harris
b9cb75e8c5 Add __AFL_INIT() to uxplink to allow afl-fuzz to skip some startup overhead. 2015-10-28 22:08:58 +00:00
Ben Harris
389eb4b7e0 When checking for an existing log, store the FILE * in a local variable.
It's not used outside logfopen, and leaving an invalid file pointer
lying around in the log context caused a segfault if the user
cancelled logging.

Bug found by afl-fuzz before it had even started fuzzing.
2015-10-28 22:08:58 +00:00
Ben Harris
7924aa945a Add a -fuzznet option to Unix plink.
It just sets the proxy command to "cat %host", which is crude and slow
but seems like a good starting point.
2015-10-28 22:08:57 +00:00
Ben Harris
5171dcb982 Check the x argument to check_boundary() more carefully.
This is a minimal fix for CVE-2015-5309, and while it's probably
unnecessary now, it seems worth committing for defence in depth and to
give downstreams something reasonably non-intrusive to cherry-pick.
2015-10-28 22:08:33 +00:00
Ben Harris
0629f1dfa5 Fix an assertion failure when loading Ed25519 keys.
"amax == 0 || a[amax] != 0"

Essentially, when decodepoint_ed() clears the top bit of the key, it
needs to call bn_restore_invariant() in case that left the high-order
word zero.

Bug found with the help of afl-fuzz.
2015-10-28 22:08:33 +00:00
Ben Harris
b94a076955 Since we have bn_restore_invariant, we may as well use it more. 2015-10-28 22:08:32 +00:00
Ben Harris
19d1ad3887 fuzzterm: Try enabling deferred implementation under afl-clang-fast 2015-10-28 22:08:32 +00:00
Ben Harris
4f34059902 bignum_set_bit: Don't abort if asked to clear an inaccessible bit
All those bits are clear anyway.

Bug found with the help of afl-fuzz.
2015-10-28 22:08:32 +00:00
Ben Harris
c0e19ca19d In get_ssh_string, don't get confused by lengths >= 0x80000000.
"confused" meaning "reading off the end of the input".

Bug found with the help of afl-fuzz.
2015-10-28 22:08:32 +00:00
Ben Harris
7707aa24d6 rsa2_pubkey_bits: Cope correctly with a NULL return from rsa2_newkey()
Dereferencing it is not correct.
Bug found with the help of afl-fuzz.
2015-10-28 22:08:32 +00:00
Ben Harris
63b47ed9d5 Another ecdsa_newkey crash: initialise ec->privateKey earlier.
This one might be exploitable, since without the fix, ecdsa_freekey()
tries to wipe the bignum pointed to by an uninitialised pointer.

Bug found with the help of afl-fuzz.
2015-10-28 22:08:32 +00:00
Ben Harris
f69b371bcd ecdsa_newkey: fix a crash where the second curve name is missing or corrupt.
Bug found with the help of afl-fuzz.
2015-10-28 22:08:32 +00:00
Ben Harris
e3fe709a8f More robust control sequence parameter handling.
Parameters are now accumulated in unsigned integers and carefully checked
for overflow (which is turned into saturation).  Things that consume them
now have explicit range checks (again, saturating) to ensure that their
inputs are sane.  This should make it much harder to cause overflow by
supplying ludicrously large numbers.

Fixes two bugs found with the help of afl-fuzz.  One of them may be
exploitable and is CVE-2015-5309.
2015-10-28 22:08:19 +00:00
Ben Harris
1a009ab2e9 Fuzzable terminal emulator. 2015-10-28 21:46:30 +00:00
Ben Harris
323c3c70c9 Gratuitous colour ramps in the colour test file. 2015-10-28 21:38:36 +00:00
Ben Harris
5936c55c7f Check the x argument to check_boundary() more carefully.
This is a minimal fix for CVE-2015-5309, and while it's probably
unnecessary now, it seems worth committing for defence in depth and to
give downstreams something reasonably non-intrusive to cherry-pick.
2015-10-27 19:59:46 +00:00
Ben Harris
6056396f77 More robust control sequence parameter handling.
Parameters are now accumulated in unsigned integers and carefully checked
for overflow (which is turned into saturation).  Things that consume them
now have explicit range checks (again, saturating) to ensure that their
inputs are sane.  This should make it much harder to cause overflow by
supplying ludicrously large numbers.

Fixes two bugs found with the help of afl-fuzz.  One of them may be
exploitable and is CVE-2015-5309.
2015-10-27 19:59:14 +00:00
Ben Harris
f7365a2d57 Handle packets with no type byte by returning SSH_MSG_UNIMPLEMENTED.
The previous assertion failure is obviously wrong, but RFC 4253 doesn't
explicitly declare them to be a protocol error.  Currently, the incoming
packet isn't logged, which might cause some confusion for log parsers.

Bug found with the help of afl-fuzz.
2015-10-24 22:45:48 +01:00
Ben Harris
c445c745ec When checking for an existing log, store the FILE * in a local variable.
It's not used outside logfopen, and leaving an infalid file pointer
lying around in the log context caused a segfault if the user
cancelled logging.

Bug found by afl-fuzz before it had even started fuzzing.
2015-10-24 22:45:48 +01:00
Ben Harris
e170041a5d rsa2_pubkey_bits: Cope correctly with a NULL return from rsa2_newkey()
Dereferencing it is not correct.
Bug found with the help of afl-fuzz.

Conflicts:
	sshrsa.c
2015-10-24 22:32:59 +01:00
Simon Tatham
758ac4c206 Initialise the random state in ssh_test_for_upstream().
This protects the Unix platform sharing code in the case where no salt
file exists yet in the connection-sharing directory, in which case
make_dirname() will want to create one by using some random bytes, and
prior to this commit, would fail an assertion because the random
number generator wasn't set up.

It would be neater to just return FALSE from ssh_test_for_upstream in
that situation - if there's no salt file, then no sharing socket can
be valid anyway - but that would involve doing more violence to the
code structure than I'm currently prepared to do for a minor elegance
gain.
2015-10-24 16:44:37 +01:00
Jacob Nevins
48eafd66aa Update docs/usage for 'plink -shareexists'. 2015-10-22 01:48:35 +01:00
Jacob Nevins
9dd9860cc8 Update docs for Ed25519 and ChaCha20-Poly1305. 2015-10-22 01:48:02 +01:00
Jacob Nevins
9f9d72ec58 PuTTYgen's default hasn't been 1024 bits since 0.63. 2015-10-22 01:46:28 +01:00
Simon Tatham
c01dff38a3 Fix a double-free in Windows Pageant.
Reported by Colin Harrison; occurred on the error path in which the
user clicks 'cancel' in the passphrase box.
2015-10-18 20:24:51 +01:00
Tim Kosse
3a43bec44c Fix a format string vulnerability if MALLOC_LOG is set.
(cherry picked from commit e443fd3a77)
2015-10-17 17:35:22 +01:00
Tim Kosse
9c8a3cb6fb Fix format string vulnerabilities.
Reported by Jong-Gwon Kim. Also fixes a few memory leaks in the
process.

(cherry picked from commit 6a70f944f6)
2015-10-17 17:35:15 +01:00