aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* exit_policy_is_general_exit is IPv4 only; it should admit it.Nick Mathewson2011-03-06
|
* Disallow reject6 and accept6 lines in descriptorsSebastian Hahn2011-03-06
| | | | | | | | | | This fixes a remotely triggerable assert on directory authorities, who don't handle descriptors with ipv6 contents well yet. We will want to revert this once we're ready to handle ipv6. Issue raised by lorth on #tor, who wasn't able to use Tor anymore. Analyzed with help from Christian Fromme. Fix suggested by arma. Bugfix on 0.2.1.3-alpha.
* Merge remote branch 'public/bug1859_021' into maint-0.2.1Nick Mathewson2011-02-22
|\
| * Fix a remaining bug in Robert's bug1859 fix.Nick Mathewson2010-11-12
| | | | | | | | | | | | When intro->extend_info is created for an introduction point, it only starts out with a nickname, not necessarily an identity digest. Thus, doing router_get_by_digest isn't necessarily safe.
| * Issues with router_get_by_nickname()Robert Hogan2010-11-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | https://trac.torproject.org/projects/tor/ticket/1859 Use router_get_by_digest() instead of router_get_by_hexdigest() in circuit_discard_optional_exit_enclaves() and rend_client_get_random_intro(), per Nick's comments. Using router_get_by_digest() in rend_client_get_random_intro() will break hidden services published by Tor versions pre 0.1.2.18 and 0.2.07-alpha as they only publish by nickname. This is acceptable however as these versions only publish to authority tor26 and don't work for versions in the 0.2.2.x series anyway.
| * Issues with router_get_by_nickname()Robert Hogan2010-11-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://trac.torproject.org/projects/tor/ticket/1859 There are two problems in this bug: 1. When an OP makes a .exit request specifying itself as the exit, and the exit is not yet listed, Tor gets all the routerinfos needed for the circuit but discovers in circuit_is_acceptable() that its own routerinfo is not in the routerdigest list and cannot be used. Tor then gets locked in a cycle of repeating these two steps. When gathering the routerinfos for a circuit, specifically when the exit has been chosen by .exit notation, Tor needs to apply the same rules it uses later on when deciding if it can build a circuit with those routerinfos. 2. A different bug arises in the above situation when the Tor instance's routerinfo *is* listed in the routerlist, it shares its nickname with a number of other Tor nodes, and it does not have 'Named' rights to its nickname. So for example, if (i) there are five nodes named Bob in the network, (ii) I am running one of them but am flagged as 'Unnamed' because someone else claimed the 'Bob' nickname first, and (iii) I run my Tor as both client and exit the following can happen to me: - I go to www.evil.com - I click on a link www.evil.com.bob.exit - My request will exit through my own Tor node rather than the 'Named' node Bob or any of the others. - www.evil.com now knows I am actually browsing from the same computer that is running my 'Bob' node So to solve both issues we need to ensure: - When fulfilling a .exit request we only choose a routerinfo if it exists in the routerlist, even when that routerinfo is ours. - When getting a router by nickname we only return our own router information if it is not going to be used for building a circuit. We ensure this by removing the special treatment afforded our own router in router_get_by_nickname(). This means the function will only return the routerinfo of our own router if it is in the routerlist built from authority info and has a unique nickname or is bound to a non-unique nickname. There are some uses of router_get_by_nickname() where we are looking for the router by name because of a configuration directive, specifically local declaration of NodeFamilies and EntryNodes and other routers' declaration of MyFamily. In these cases it is not at first clear if we need to continue returning our own routerinfo even if our router is not listed and/or has a non-unique nickname with the Unnamed flag. The patch treats each of these cases as follows: Other Routers' Declaration of MyFamily This happens in routerlist_add_family(). If another router declares our router in its family and our router has the Unnamed flag or is not in the routerlist yet, should we take advantage of the fact that we know our own routerinfo to add us in anyway? This patch says 'no, treat our own router just like any other'. This is a safe choice because it ensures our client has the same view of the network as other clients. We also have no good way of knowing if our router is Named or not independently of the authorities, so we have to rely on them in this. Local declaration of NodeFamilies Again, we have no way of knowing if the declaration 'NodeFamilies Bob,Alice,Ringo' refers to our router Bob or the Named router Bob, so we have to defer to the authorities and treat our own router like any other. Local declaration of NodeFamilies Again, same as above. There's also no good reason we would want our client to choose it's own router as an entry guard if it does not meet the requirements expected of any other router on the network. In order to reduce the possibility of error, the patch also replaces two instances where we were using router_get_by_nickname() with calls to router_get_by_hexdigest() where the identity digest of the router is available.
* | Merge remote branch 'public/bug2402_nothing' into maint-0.2.1Nick Mathewson2011-02-22
|\ \
| * | Simplest fix to bug2402: do not include SVN versionsNick Mathewson2011-01-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we stopped using svn, 0.2.1.x lost the ability to notice its svn revision and report it in the version number. However, it kept looking at the micro-revision.i file... so if you switched to master, built tor, then switched to 0.2.1.x, you'd get a micro-revision.i file from master reported as an SVN tag. This patch takes out the "include the svn tag" logic entirely. Bugfix on 0.2.1.15-rc; fixes bug 2402.
* | | fix the other half of bug 1074Roger Dingledine2011-02-10
| | |
* | | Make the DH parameter we use for TLS match the one from Apache's mod_sslNick Mathewson2011-02-10
| | | | | | | | | | | | | | | | | | | | | | | | Our regular DH parameters that we use for circuit and rendezvous crypto are unchanged. This is yet another small step on the path of protocol fingerprinting resistance. (Backport from 0.2.2's 5ed73e3807d90dd0a3)
* | | Ignore and warn about "PublishServerDescriptor hidserv"Robert Ransom2011-02-09
| | | | | | | | | | | | Fixes #2408.
* | | move the clause above the "if bw is too low" checkRoger Dingledine2011-02-07
| | |
* | | dtrt when only relaybandwidthburst is setRoger Dingledine2011-02-07
| | | | | | | | | | | | fixes bug 2470
* | | Update to the February 1 2011 Maxmind GeoLite Country database.Karsten Loesing2011-02-07
| | |
* | | Merge remote branch 'rransom/policy_summarize-assert' into maint-0.2.1Nick Mathewson2011-01-20
|\ \ \
| * | | Fix bounds-checking in policy_summarizeRobert Ransom2011-01-20
| |/ / | | | | | | | | | Found by piebeer.
* / / Oops; actually add the code to the last patch. :/Nick Mathewson2011-01-19
|/ /
* | Fix a couple of non-cleared key issues in hidden servicesNick Mathewson2011-01-15
| | | | | | | | we need to do more hunting, but this fixes the ones mentioned in 2385.
* | Zero out some more key data before freeing itNick Mathewson2011-01-15
| | | | | | | | Found by cypherpunks; fixes bug 2384.
* | Merge branch 'bug2352_obsize' into maint-0.2.1Nick Mathewson2011-01-15
|\ \
| * | catch another overlong malloc possibility. found by cypherpunksNick Mathewson2011-01-15
| | |
| * | Impose maximum sizes on parsed objectsNick Mathewson2011-01-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | An object, you'll recall, is something between -----BEGIN----- and -----END----- tags in a directory document. Some of our code, as doorss has noted in bug 2352, could assert if one of these ever overflowed SIZE_T_CEILING but not INT_MAX. As a solution, I'm setting a maximum size on a single object such that neither of these limits will ever be hit. I'm also fixing the INT_MAX checks, just to be sure.
| * | Add logic in routerparse to not read overlong private keysNick Mathewson2011-01-10
| | | | | | | | | | | | | | | I am not at all sure that it is possible to trigger a bug here, but better safe than sorry.
* | | Add missing check for hostname answer_len in dnsserv sizeNick Mathewson2011-01-15
| | | | | | | | | | | | This is checked elsewhere too, but let's be RFC-conformant.
* | | Merge branch 'bug2324_uncompress' into maint-0.2.1Nick Mathewson2011-01-15
|\ \ \
| * | | clean up message; explain a magic number in a commentNick Mathewson2011-01-15
| | | |
| * | | Fix a SIZE_T_CEILING check in torgzip.c; noticed by cypherpunksNick Mathewson2011-01-05
| | | |
| * | | Detect and disallow compression bombsNick Mathewson2011-01-03
| | | |
* | | | Fix a heap overflow found by debuger, and make it harder to make that ↵Nick Mathewson2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mistake again Our public key functions assumed that they were always writing into a large enough buffer. In one case, they weren't. (Incorporates fixes from sebastian)
* | | | Always nul-terminate the result passed to evdns_server_add_ptr_replyNick Mathewson2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In dnsserv_resolved(), we carefully made a nul-terminated copy of the answer in a PTR RESOLVED cell... then never used that nul-terminated copy. Ouch. Surprisingly this one isn't as huge a security problem as it could be. The only place where the input to dnsserv_resolved wasn't necessarily nul-terminated was when it was called indirectly from relay.c with the contents of a relay cell's payload. If the end of the payload was filled with junk, eventdns.c would take the strdup() of the name [This part is bad; we might crash there if the cell is in a bad part of the stack or the heap] and get a name of at least length 495[*]. eventdns.c then rejects any name of length over 255, so the bogus data would be neither transmitted nor altered. [*] If the name was less than 495 bytes long, the client wouldn't actually be reading off the end of the cell. Nonetheless this is a reasonably annoying bug. Better fix it. Found while looking at bug 2332, reported by doorss. Bugfix on 0.2.0.1-alpha.
* | | | Make our replacement INT32_MAX always signedNick Mathewson2011-01-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The C standard says that INT32_MAX is supposed to be a signed integer. On platforms that have it, we get the correct platform-defined value. Our own replacement, however, was unsigned. That's going to cause a bug somewhere eventually.
* | | | Update to the January 1 2011 Maxmind GeoLite Country database.Karsten Loesing2011-01-10
| |/ / |/| |
* | | Remove a loud info log messageNick Mathewson2011-01-07
| | |
* | | Correctly detect and exclude addresses outside of our virtual address rangeNick Mathewson2011-01-07
| | | | | | | | | | | | | | | Found by cypherpunks; fixes more of 2328. Bug was introduced in 3623a122; first appeared in 0.2.0.5-alpha.
* | | Merge branch 'bug2328_021' into maint-0.2.1Nick Mathewson2011-01-06
|\ \ \ | |/ / |/| |
| * | Notice a little faster if we're running out of virtual addressesNick Mathewson2011-01-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were not decrementing "available" every time we did ++next_virtual_addr in addressmap_get_virtual_address: we left out the --available when we skipped .00 and .255 addresses. This didn't actually cause a bug in most cases, since the failure mode was to keep looping around the virtual addresses until we found one, or until available hit zero. It could have given you an infinite loop rather than a useful message, however, if you said "VirtualAddrNetwork 127.0.0.255/32" or something broken like that. Spotted by cypherpunks
| * | Handle a NULL return from addressmap_get_virtual_addressNick Mathewson2011-01-05
| | | | | | | | | | | | Fix for bug 2328; bugfix on 0.1.2.1-alpha; bug found by doorss.
| * | Fix a double-counting bug in addrmap_get_virtual_addressNick Mathewson2011-01-05
| | | | | | | | | | | | | | | | | | We were decrementing "available" twice for each in-use address we ran across. This would make us declare that we ran out of virtual addresses when the address space was only half full.
* | | Avoid assertion on read_file_to_str() with size==SIZE_T_CEILING-1Nick Mathewson2011-01-03
| | | | | | | | | | | | Spotted by doors, fixes bug 2326.
* | | Check size against SIZE_T_CEILING in realloc too.Nick Mathewson2011-01-03
| | | | | | | | | | | | Fixes bug 2324.
* | | Never include pthread.h when building for Windows.Nick Mathewson2011-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On Windows, we never use pthreads, since it doesn't usually exist, and when it does it tends to be a little weirdly-behaved. But some mingw installations have a pthreads installed, so autoconf detects pthread.h and tells us about it. This would make us include pthread.h, which could make for trouble when the iffy pthread.h tried to include config.h. This patch changes compat.h so that we never include pthread.h on Windows. Fixes bug 2313; bugfix on 0.1.0.1-rc.
* | | fix whitespace issuesNick Mathewson2011-01-03
| | |
* | | Bump copyright statements to 2011Nick Mathewson2011-01-03
|/ /
* | Merge remote branch 'public/bug2190_021' into maint-0.2.1Nick Mathewson2010-12-21
|\ \
| * | Do not send Libevent log messages to a controller (0.2.1 backport)Nick Mathewson2010-11-19
| |/ | | | | | | | | | | | | | | | | | | Doing so could make Libevent call Libevent from inside a Libevent logging call, which is a recipe for reentrant confusion and hard-to-debug crashes. This would especially hurt if Libevent debug-level logging is enabled AND the user has a controller watching for low-severity log messages. Fix bug 2190; fix on 0.1.0.2-rc.
* | Merge commit 'nickm/fix_security_bug_021' into maint-0.2.1Roger Dingledine2010-12-16
|\ \
| * | Make payloads into uint8_t.Nick Mathewson2010-12-15
| | | | | | | | | | | | This will avoid some signed/unsigned assignment-related bugs.
| * | Have all of our allocation functions and a few others check for underflowNick Mathewson2010-12-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | It's all too easy in C to convert an unsigned value to a signed one, which will (on all modern computers) give you a huge signed value. If you have a size_t value of size greater than SSIZE_T_MAX, that is way likelier to be an underflow than it is to be an actual request for more than 2gb of memory in one go. (There's nothing in Tor that should be trying to allocate >2gb chunks.)
| * | Base SIZE_T_CEILING on SSIZE_T_MAX.Nick Mathewson2010-12-13
| | |
* | | Change gabelmoo's IP address and ports.Karsten Loesing2010-12-16
| | |