mirror of https://github.com/wolfSSL/wolfssh.git
Address review: TPM publickey auth fallback, reject truncated CA, guard negative CI test, silence maybe-uninitialized
parent
d818d032ba
commit
b8e2fd3703
|
|
@ -186,8 +186,14 @@ jobs:
|
||||||
cat tpmcert_client_neg.txt
|
cat tpmcert_client_neg.txt
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
echo "----- server -----"; cat tpmcert_server_neg.txt
|
||||||
echo "client correctly rejected the untrusted server:"
|
echo "client correctly rejected the untrusted server:"
|
||||||
cat tpmcert_client_neg.txt
|
cat tpmcert_client_neg.txt
|
||||||
|
# Guard against a false pass: the server must have come up, and the
|
||||||
|
# client must have failed inside the SSH handshake (certificate
|
||||||
|
# rejection) rather than from a plain connection failure.
|
||||||
|
grep -q "Listening on port" tpmcert_server_neg.txt
|
||||||
|
grep -q "wolfSSH_connect failed" tpmcert_client_neg.txt
|
||||||
|
|
||||||
# Client public-key authentication with a TPM-resident key (RSA only).
|
# Client public-key authentication with a TPM-resident key (RSA only).
|
||||||
- name: Test TPM client public-key auth
|
- name: Test TPM client public-key auth
|
||||||
|
|
|
||||||
|
|
@ -72,14 +72,18 @@ static int TpmCcLoadFile(const char* file, byte* buf, word32* bufSz)
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
FILE* f = fopen(file, "rb");
|
FILE* f = fopen(file, "rb");
|
||||||
size_t n;
|
size_t n;
|
||||||
|
int extra;
|
||||||
|
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
n = fread(buf, 1, *bufSz, f);
|
n = fread(buf, 1, *bufSz, f);
|
||||||
|
/* If the buffer filled exactly, the file may be larger than the buffer;
|
||||||
|
* reject a truncated read rather than loading a partial certificate. */
|
||||||
|
extra = (n == (size_t)*bufSz) ? fgetc(f) : EOF;
|
||||||
fclose(f);
|
fclose(f);
|
||||||
if (n == 0)
|
if (n == 0 || extra != EOF)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
else
|
else
|
||||||
*bufSz = (word32)n;
|
*bufSz = (word32)n;
|
||||||
|
|
|
||||||
|
|
@ -84,11 +84,11 @@ static int TpmCsMakeKeyAndCert(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key,
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
int devId = INVALID_DEVID;
|
int devId = INVALID_DEVID;
|
||||||
int sigType;
|
int sigType = 0;
|
||||||
TpmCryptoDevCtx tpmCtx;
|
TpmCryptoDevCtx tpmCtx;
|
||||||
WOLFTPM2_KEY srk;
|
WOLFTPM2_KEY srk;
|
||||||
TPMT_PUBLIC pub;
|
TPMT_PUBLIC pub;
|
||||||
const char* subject;
|
const char* subject = NULL;
|
||||||
const char* keyUsage = "serverAuth,clientAuth";
|
const char* keyUsage = "serverAuth,clientAuth";
|
||||||
TPMA_OBJECT attr;
|
TPMA_OBJECT attr;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17688,9 +17688,12 @@ int SendUserAuthRequest(WOLFSSH* ssh, byte authType, int addSig)
|
||||||
#ifdef WOLFSSH_TPM
|
#ifdef WOLFSSH_TPM
|
||||||
/* When the client has a TPM key configured, prefer publickey auth so
|
/* When the client has a TPM key configured, prefer publickey auth so
|
||||||
* the TPM key is used even if the server also offers password or
|
* the TPM key is used even if the server also offers password or
|
||||||
* keyboard-interactive. Applied before any method-specific branch. */
|
* keyboard-interactive. Only strip the other methods on the first
|
||||||
if (ssh->ctx->tpmKey != NULL
|
* attempt; once publickey has been tried and rejected, allow fallback
|
||||||
|
* to password/keyboard on the next DoUserAuthFailure() retry. */
|
||||||
|
if (ssh->ctx->tpmKey != NULL && !ssh->tpmPubkeyTried
|
||||||
&& (authType & WOLFSSH_USERAUTH_PUBLICKEY)) {
|
&& (authType & WOLFSSH_USERAUTH_PUBLICKEY)) {
|
||||||
|
ssh->tpmPubkeyTried = 1;
|
||||||
authType &= ~WOLFSSH_USERAUTH_PASSWORD;
|
authType &= ~WOLFSSH_USERAUTH_PASSWORD;
|
||||||
#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
|
#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
|
||||||
authType &= ~WOLFSSH_USERAUTH_KEYBOARD;
|
authType &= ~WOLFSSH_USERAUTH_KEYBOARD;
|
||||||
|
|
|
||||||
|
|
@ -1033,6 +1033,9 @@ struct WOLFSSH {
|
||||||
WS_UserAuthData_Keyboard kbAuth;
|
WS_UserAuthData_Keyboard kbAuth;
|
||||||
byte kbAuthAttempts;
|
byte kbAuthAttempts;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef WOLFSSH_TPM
|
||||||
|
byte tpmPubkeyTried; /* client tried TPM publickey; allow auth fallback */
|
||||||
|
#endif
|
||||||
#ifdef WOLFSSH_TEST_INTERNAL
|
#ifdef WOLFSSH_TEST_INTERNAL
|
||||||
word32 testSftpSendCap; /* test hook: cap per-call SFTP buffer send */
|
word32 testSftpSendCap; /* test hook: cap per-call SFTP buffer send */
|
||||||
word32 testSftpStallPending; /* test hook: force N flush-only resumes */
|
word32 testSftpStallPending; /* test hook: force N flush-only resumes */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue