CWE ID 327: AbstractNamedCurve.java:94

Brent Putman putmanb at georgetown.edu
Thu Sep 15 03:55:08 UTC 2022


Hi Jeremy,


On 9/14/22 8:55 PM, Jeremy Karlson via users wrote:
> Hi everyone. I’m new here, so I apologize if this has been discussed ad nauseam before. (I did try searching for answers, but didn’t fine clarity for this specific file.)


Nope, this is the first time it's been brought up AFAIK.


>
> Veracode (a code scanning tool my employer has recently started using) is reporting CWE ID 27 (Use of a Broken or Risky Cryptographic Algorithm) specifically in opensaml-security-api,


I have no familiarity with Veracode. I found this table with CWE IDs:

https://docs.veracode.com/r/c_review_cwe

but 27 is a different thing, about path traversal.  The one with that 
name/label is actually 327 - can you confirm that that is a typo etc, 
and 327 is the one in question?


> org.opensaml.security.crypto.ec.curves.AbstractNamedCurve.java, line 94. This method is:
>
>     @Nullable protected ECParameterSpec buildParameterSpec()
>
> And the line in question is:
>
>     jcaSpec = ECPublicKey.class.cast(
>        KeySupport.generateKeyPair(JCAConstants.KEY_ALGO_EC, new ECGenParameterSpec(getName()), null)
>           .getPublic()).getParams();
>
> I looked at the code but I am certainly out of my depth here, as I know very little about how this operates internally.


That's sort of weird. The only cryptographic algorithm mentioned there 
is (general) use of Elliptic Curve (EC) keys, and that certainly isn't 
broken or risky. I mean, it's considered more secure and future-proof 
than RSA.  I was expecting this to possibly point at a weak signing or 
encryption algorithm, but all that code is doing is generating an EC 
keypair so if that is truly the code in question, this really doesn't 
make any sense.

Unless... it's possibly actually flagging on a *particular* named 
curve.  But in that case, we'd need to know which named curve. The code 
above is just code in an abstract base class that resolves an 
ECParameterSpec based on a curve name.  So we'd need to know the actual 
curve name from the surrounding context.


>   I am certain this has been brought up and considered before, so if someone wants to let me know this isn’t a problem, I can put a checkmark in this box and we can all get on with out days. :-)


It actually never has, to my knowledge.  It's certainly possible that 
we are by default including support for a named curve that is 
considered weak at this point.

But the code reference above doesn't tell us anything useful. We'd need 
to know the value of the getName() there - the named curve ID - which 
is going to be in the concrete class impl. (Every named curve will have 
a concrete NamedCurve impl, which has AbstractNamedCurve as a super class.)

--Brent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://shibboleth.net/pipermail/users/attachments/20220914/bf66243d/attachment.htm>


More information about the users mailing list