In the original paper makes it clear that the nearest neighbours are from the minority class, so it appears that Liu et al. are mistaken.
Having said which, I am not sure the paper is entirely consistent with most implementations (or indeed itself)
I think for the synthetic point to be on a line joining the selected minority point with it's nearest neighbour, $gap$ would have to be assigned outside the loop over attributes, not inside it.
BTW if you are using a modern classifier, such as an SVM, that can implement cost-sensitive learning and has a good means of avoiding overfitting, then I would advise against using SMOTE. Techniques such as regularisation have a lot of solid theory behind them, the method used by SMOTE has none. I would also advise using a probabilistic classifier for problems with unequal misclassification costs etc. as you can account for the misclassification costs after the model has been fitted to the data.