1.1 I think the assumption that an attacker can do everything is dangerous, as this isn't a typical capability that an attacker would have. It's much more common that an attacker can just monitor, or monitor and inject but not block.
I don't have a problem adding a caveat about this in 1.1, but I'm trying
to understand the cases that you are thinking off.
the attacker can also employ ARP/ND spoofing to get access to the packet flow which allows blocking as well.
2- ULP I think that the definition of ULP clashes with other uses of the term, where it is used as "anything above the network layer" or "anything above the layer under discussion". The current definition is largely the same as "transport layer" if we ignore some more esoteric protocols that run on top of IP (such as ICMP) which are special cases with regard to multihoming anyway.
I see the definition has "immediately above IP" which actually wasn't the
intent. The intent was anything "above the network layer". If I say "any layer
above IP" and add some words about applications would that correct things?
Re 3.4: I think it would be possible to mitigate many of the problems here by including a periodic state refresh and disallowing adding new locators when the original address which has been "validated" using return routability is no longer reachable.
I think preventing 3rd party flooding attacks doesn't have to be very complicated. But are you proposing that a node could send to a locator without having any assurance that the peer is in fact present at that locator i.e. without any form of RR check?
4.3 can be addressed by reflecting the original address back so if the negotiation is corrupted by an attacker at least there is a way to trace this back part of the way.
Are you commenting on the first paragraph of 4.3?
The more specific details in 4.3.1 and 4.3.2 seems to indicate to me
that you actually need to verify that the peer is present at the claimed
locator.
About 5: a good start would be to make a split between the state for incoming and outgoing sessions.
But isn't that hard for UDP, when the kernel stack doesn't explicitly know who started the communication?
Having to do work per session may not be so bad if there is a way to quickly sync up with the state that's already there for older sessions. Both hosts would then know they're still talking to the same correspondent. If this fails (maybe legitimate loss of state due to timeout) they can fall back to a full session initialization.
But wouldn't such an ability to securely resume a previous session
require that some state is retained from that session i.e. the session
state isn't really removed? How would this be different than just
keeping all the session state? In either case there would be some timeout
or other garbage collection trigger to remove the state I think.
Maybe a stupid idea, but would it be useful to have some mechanism to
discover insecure links? A simple way to do this would be blocking
(initial) multi6 packets on such links so initiating multihoming
negotiations over such unsafe links which may lead to later redirection
attacks becomes impossible.
Apart from the policy question, where different hosts might consider different
things "secure" vs. "not secure", would it be possible to make any form
of automatic detection of anything but the link attached to the host?