In the 9.5 alpha series meek is not used anymore even if meek is selected as pluggable transport. Instead Tor Browser tries to use some obfs4 bridge from the bridge list coming with Tor Browser. That's happening on 9.5a11. 9.0.9 is not affected.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items
0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
Linked items
0
Link issues together to show that they're related.
Learn more.
STR: Take a new 9.5a11 and select meek during start-up. Resume connecting to the Tor network and watch the log. obfs4 bridge details show up instead of meek ones.
When we combine this with the fix for #30767 (moved), we have a recipe for adding all default bridges and configuring a pluggable transport for meek_lite,obfs3,obfs4. We never filter the list of bridge for the selected type. As a result, tor chooses one of the configured bridges which is (probabilistically) an obfs4 bridge.
The summary of these patches is that tor-android-service encodes (within the first byte) if the following datastream is arbitrary custom bridges or if it comes from a list of default bridges (and which specific bridge type, if applicable).
When the first byte is:
1, then the stream contains arbitrary bridges
0, then the stream is all default bridges
2, then the stream is all default bridges and only obfs4 bridges should be used after parsing
3, then the stream is all default bridges and only meek_lite bridges should be used after parsing
TOPL receives this and now handles them appropriately.
I did not have time to fully understand the code, but let's see. My understanding is that the code in CustomTorInstaller.java cannot do the filtering, since it's not responsible of parsing the bridges, and the changes are needed so that the code that parses the bridges can filter them. I hope that's correct.
would it make sense to update the comment:
For (1), we just pass back all bridges, the filter will occur elsewhere in the library.
to include the fact that we are also encoding the bridge type that has to be filtered?
Besides, given the userDefinedBridgeList.length() > 5 check, I think userDefinedBridgeList cannot be "meek_lite", so I assume this can be removed from the switch.
I did not have time to fully understand the code, but let's see. My understanding is that the code in CustomTorInstaller.java cannot do the filtering, since it's not responsible of parsing the bridges, and the changes are needed so that the code that parses the bridges can filter them. I hope that's correct.
would it make sense to update the comment:
For (1), we just pass back all bridges, the filter will occur elsewhere in the library.
to include the fact that we are also encoding the bridge type that has to be filtered?
Yes, I'll add that comment.
Besides, given the userDefinedBridgeList.length() > 5 check, I think userDefinedBridgeList cannot be "meek_lite", so I assume this can be removed from the switch.
The defined cases in this patch are the only pluggable transports we currently use (obfs4 and meek(_lite)). In the past, we had obfs3. I don't think we should expand this list, but (after thinking about this a little more) we should fail safe if the type is not recognized instead of "all bridges" being the default. I'll add that in a fixup commit. Thanks!
The rest looks ok to me,. I did not have time to test the patch, but I'll start a build for that in case it's needed (it will take a while).
I did not have time to fully understand the code, but let's see. My understanding is that the code in CustomTorInstaller.java cannot do the filtering, since it's not responsible of parsing the bridges, and the changes are needed so that the code that parses the bridges can filter them. I hope that's correct.
would it make sense to update the comment:
For (1), we just pass back all bridges, the filter will occur elsewhere in the library.
to include the fact that we are also encoding the bridge type that has to be filtered?
Yes, I'll add that comment.
Besides, given the userDefinedBridgeList.length() > 5 check, I think userDefinedBridgeList cannot be "meek_lite", so I assume this can be removed from the switch.
The defined cases in this patch are the only pluggable transports we currently use (obfs4 and meek(_lite)). In the past, we had obfs3. I don't think we should expand this list, but (after thinking about this a little more) we should fail safe if the type is not recognized instead of "all bridges" being the default. I'll add that in a fixup commit. Thanks!
I am not exactly sure if that's what you meant but I think the case where bridgeType for whatever reason is still 0 at the end of openBridgeSream() should be treated in addBridgesFromResources() in the throw block. That is, there should not be a case 0 check anymore. Keeping that smells just like trouble we are currently dealing with. We start to be explicit with your patches in this bug. so let's avoid ambiguity here where we can.
The rest looks ok to me,. I did not have time to test the patch, but I'll start a build for that in case it's needed (it will take a while).
The defined cases in this patch are the only pluggable transports we currently use (obfs4 and meek(_lite)). In the past, we had obfs3. I don't think we should expand this list, but (after thinking about this a little more) we should fail safe if the type is not recognized instead of "all bridges" being the default. I'll add that in a fixup commit. Thanks!
I am not exactly sure if that's what you meant but I think the case where bridgeType for whatever reason is still 0 at the end of openBridgeSream() should be treated in addBridgesFromResources() in the throw block. That is, there should not be a case 0 check anymore. Keeping that smells just like trouble we are currently dealing with. We start to be explicit with your patches in this bug. so let's avoid ambiguity here where we can.
I think I was imagining that we would throw at the end of openBridgeStream(), but lettingaddBridgesFromResources() handle this error case seems okay to me, in this case, as well.
I pushed a fixup commit onto my tor-android-service bug33931_00 branch, and I pushed a new tor-browser-build branch bug33931_01 containing an updated TOPL patch.
The defined cases in this patch are the only pluggable transports we currently use (obfs4 and meek(_lite)). In the past, we had obfs3. I don't think we should expand this list, but (after thinking about this a little more) we should fail safe if the type is not recognized instead of "all bridges" being the default. I'll add that in a fixup commit. Thanks!
I am not exactly sure if that's what you meant but I think the case where bridgeType for whatever reason is still 0 at the end of openBridgeSream() should be treated in addBridgesFromResources() in the throw block. That is, there should not be a case 0 check anymore. Keeping that smells just like trouble we are currently dealing with. We start to be explicit with your patches in this bug. so let's avoid ambiguity here where we can.
I think I was imagining that we would throw at the end of openBridgeStream(), but lettingaddBridgesFromResources() handle this error case seems okay to me, in this case, as well.
I pushed a fixup commit onto my tor-android-service bug33931_00 branch, and I pushed a new tor-browser-build branch bug33931_01 containing an updated TOPL patch.
Looks good to me. Squashed and merged to tor-android-service's master (commit ed2e1479eeddede01b1d510ef79dc5ec798b39c0) and merged to tor-browser-build's master + a commit to pick the tor-android-service changes up (commits 04da65342a76f74b3d4a58601f326ded457dc97a and b858dca8745b583afd2660389ccd5a96630154a0).
Trac: Resolution: N/Ato fixed Status: needs_review to closed